2011-03-30 71 views
3

我刚刚在一个非常小的项目上使用了IoC,只有一个对象需要测试。我现在开始将其实施到一个更大的现有项目中,并且我不确定什么。IoC应该走多远?

说,我有两个业务对象StudentTeacher都有构造函数注入对于具有的SQLUnitOfWorkInMemoryUnitOfWork具体实例称为IUnitOfWork的接口。

所以,如果我使用这个库,我可以使用IoC来构造我的对象,不用担心,但是当我想在另一个内部使用它时会发生什么?所以说我懒加载一个属性Student.Teacher并需要得到一个新的Teacher对象,我该怎么做?

有些东西似乎不适合使用IoC容器来实现这一点,但也没有具体的对象。在每个使用的对象上使用IoC似乎过分。

+0

你使用的是ORM吗?您的网络项目是? – Paul 2011-03-30 06:39:34

+0

相关:http://stackoverflow.com/questions/1872711/what-should-be-constructed-through-an-ioc-container – 2011-03-30 06:41:09

+0

可能的重复:http://stackoverflow.com/questions/4835046/why-not- use-an-ioc-container-to-resolve-dependencies-for-entities-business-object – 2011-03-30 06:42:32

回答

1

我通常避免在领域层使用IoC - 您只想在应用层尝试访问内核(其中,您可以访问内核的程度非常高)。

对于我的项目,我所有的业务对象通常都是POCO,除了框架之外,其他依赖性都很少。

服务层往往有很多依赖关系,但并不经常直接访问内核。

您是否可以做到这一点将取决于您选择的ORM等,当然还有项目的现有架构。

如果您的业务对象具有需要解决的依赖项,那么您要么需要使用内核来解决它们,要么重构项目以删除依赖项。

+0

内核是什么意思?另外我不明白我如何设计一个不引用模型中其他对象的领域模型,有什么我应该阅读以帮助我理解这一点? – 2011-03-30 06:13:53

+0

@ g.foley:内核是一些IoC框架用于其容器的术语;该对象允许创建和返回新的实例。 – Steven 2011-03-30 07:18:29

+0

'Kernel'只是IoC容器的另一个字词......对不起,我使用NInject,出于某种原因他们称之为内核而不是容器。是的,有很多东西需要阅读,但是从哪里开始取决于你的平台,ORM等等。 – cbp 2011-03-30 07:19:46

0

而不是在您的学生和老师类(UnitOfWork)有依赖关系,有一个服务层与依赖关系,引用学生和老师类。

这样你的实体类可以是POCO的,并且可以在测试中轻松地嘲弄。