5

有没有办法使用 EF6 注入自定义对象实例创建者?我需要做的是在matrialization 发生之前向EF 提供实体实例。

基本上我希望能够使用非无参数构造函数定义我的 POCO 实体,以便能够使用 DI 聚合,最终与 EF 保持一致。

我已经可以使用 ObjectMaterialized 事件实现类似的目标:

var oc = ( this as IObjectContextAdapter ).ObjectContext;
oc.ObjectMaterialized += ( s, e ) => 
{
   //resolve and inject dependencies here using e.g. public properties  
};

但我真的很想在构造函数上声明依赖项。

任何想法?干杯,.m

4

1 回答 1

4

使用默认的 ObjectContext,我认为查看 EF 代码是不可能的。最终,对象由ObjectContext.CreateObject. 这做了两件事之一:它要么调用默认构造函数,要么,如果启用了代理创建,它会创建相关的代理类型。代理类型用于增强更改跟踪和延迟加载属性。

但是,它ObjectContext.CreateObject是虚拟的,因此可以在派生类中覆盖它。该派生类将提供对容器(或生命周期范围)的引用,然后在被覆盖的CreateObject调用中,这将用于解析实体。

那么问题就变成了,如何将派生类型指定为ObjectContext用于 a DbContext?好吧,有一个构造函数接受ObjectContextDbContext应该使用的实例。

这是我的想法开始偏离轨道的地方,因为ObjectContext需要告知它在连接字符串中使用的模型。我认为这可能意味着代码优先方法不起作用,因为模型是延迟创建的,因此在DbContext构建之前不可用。但是,对于模型优先的方法,也许这可行?

于 2014-05-10T20:01:17.527 回答