我刚刚在一个非常小的项目中使用IoC,只需要测试一个对象。我现在开始将它实现到一个更大的现有项目中,我不确定是什么。
假设我有两个业务对象Student
和Teacher
都有一个名为IUnitOfWork
的接口的构造函数注入,该接口具有SQLUnitOfWork
或InMemoryUnitOfWork
的具体实例。
因此,如果我正在使用这个库,我可以使用IoC来构建我的对象而不用担心,但是当我想在另一个内部使用它时会发生什么?所以说我懒得加载一个属性Student.Teacher
并且需要获得一个新的Teacher
对象,我该怎么办?
使用IoC容器来实现这一目标似乎不对,但是没有具体的对象。在每个使用的对象上使用IoC似乎过多。
答案 0 :(得分:1)
我通常避免在域层中使用IoC - 您只想在应用程序层中尝试访问内核(其中,是的,您可能会非常访问内核)。
对于我的项目,我的所有业务对象通常都是POCO,除了框架内容之外几乎没有任何依赖。
服务层往往有很多依赖项,但不会经常直接访问内核。
您是否可以这样做取决于您选择的ORM等,当然还有项目的现有架构。
如果您的业务对象具有需要解析的依赖项,那么您将需要使用内核来解析它们,或者重构项目以删除依赖项。
答案 1 :(得分:0)
不要在Student和Teacher类(UnitOfWork)中使用依赖项,而是要有一个具有引用Student和Teacher类的依赖项的服务层。
这样,您的实体类可以是POCO,并且可以在测试中轻松模拟等。