有没有办法,使用EF6,注入自定义对象实例创建者?我需要做的是在美国化发生之前向EF提供实体实例.
基本上我希望能够使用非参数构造函数来定义我的POCO实体,因此为了能够使用DI aggreate,最终会使用EF持久化.
我知道我可以使用ObjectMaterialized事件来实现类似的东西:
var oc = ( this as IObjectContextAdapter ).ObjectContext;
oc.ObjectMaterialized += ( s, e ) =>
{
//resolve and inject dependencies here using e.g. public properties
};
Run Code Online (Sandbox Code Playgroud)
但我真的很想在构造函数上声明依赖项.
任何的想法?干杯,.m
使用默认的 ObjectContext,在查看 EF 代码后我认为这是不可能的。最终对象是由创建的ObjectContext.CreateObject。这会执行以下两件事之一:它要么调用默认构造函数,要么如果启用了代理创建,则它会创建相关的代理类型。代理类型用于增强更改跟踪和延迟加载属性。
但是,它ObjectContext.CreateObject是虚拟的,因此可以在派生类中重写它。该派生类将提供对容器(或生命周期范围)的引用,然后在重写的调用中CreateObject,这将用于解析实体。
那么问题就变成了,如何指定派生类型作为ObjectContext用于 a 的DbContext?嗯,有一个构造函数接受ObjectContextDbContext应该使用的实例。
这就是我的想法开始有点偏离轨道的地方,因为它ObjectContext本身需要被告知它在连接字符串中使用的模型。我认为这可能意味着代码优先方法不起作用,因为模型是延迟创建的,因此在构建之前不可用DbContext。然而,对于模型优先方法,这也许可行吗?