0

我已经将我的项目设置为使用实体框架。这是一种数据库优先的方法。

对于 IoC,我使用的是 Castle Windsor,并且该项目设置为注入所有依赖项。我的问题是,是否需要设置 Castle 来为我的 EF 实体做同样的事情?我怎样才能做到这一点?

4

1 回答 1

0

有多种方法可以将实体框架与 Castle 结合使用。我建议您同时采用工作单元存储库模式。DbContext 提供了工作单元的大部分功能,而 DbSet 类似地提供了存储库所需的大部分功能。

您将遇到的主要问题是 EF 不了解模型对象的依赖注入。EF 在分配模型对象时总是使用空构造函数,这意味着我们没有机会对模型对象进行依赖注入。我们通过使用 DbContext 上的对象物化钩子解决了这个问题:

((IObjectContextAdapter)this).ObjectContext.ObjectMaterialized += EFObjectLoadInitializer;

然后 EFObjectLoadInitializer 将内核注入模型对象(我们所有的模型对象都必须支持 IInjectKernel 接口)。注入后,内核将用于解决任何其他依赖项。它不是很干净,但运行良好,允许我们利用我们在 Windsor 中建立的其他基础设施。

于 2014-02-28T03:58:49.183 回答