有没有办法使用实体框架和延迟加载来实现依赖注入?
当您连接到 时,我知道方法ObjectStateManagerChanged
,但我想改用构造函数注入,并使我的模型实体不知道任何 IOC 容器。(假设我已经分离了 BLL 和 DAL,并希望让我的 BLL 尽可能减少外部依赖)。
谢谢你。
有没有办法使用实体框架和延迟加载来实现依赖注入?
当您连接到 时,我知道方法ObjectStateManagerChanged
,但我想改用构造函数注入,并使我的模型实体不知道任何 IOC 容器。(假设我已经分离了 BLL 和 DAL,并希望让我的 BLL 尽可能减少外部依赖)。
谢谢你。
完全避免在您的实体中使用依赖注入。例如,看看这个 SO question。
尝试使用命令/处理程序模式来编写业务操作。通过定义一个通用接口,您可以通过实现一个简单的装饰器来获得很好的可扩展性和实现安全检查的能力。
为了防止 UI 开发人员访问他们不应该访问的数据,编写一个(或多个)装饰器来包装命令处理程序(和查询处理程序)并防止从业务层返回具有延迟加载能力的实体。而是返回DTO。这样业务层就可以完全控制。
您不能将构造函数注入与 EF 一起使用。从数据库记录中具体化实体时,EF 始终使用默认构造函数。在这种情况下,您唯一的选择是使用实体中的ObjectMaterialized
事件ObjectContext
和使用属性来传递初始化数据。
您应该按照@Steven 的评论来实现您需要的逻辑。