依赖注入,注入一个“注射”对象(服务)到newable(实体)
在编写代码时,我们应该能够找出两个大组对象:依赖注入,注入一个“注射”对象(服务)到newable(实体)
- 注射剂
- Newables
http://www.loosecouplings.com/2011/01/how-to-write-testable-code-overview.html
http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/
个注射对象是暴露在它们的构造函数依赖这些依赖通常使用IoC容器解决对象(服务),这些对象可以只要求其他注射在它们的构造
Newable的对象也暴露在它们的构造,但newables依赖只能寻求其他newable对象(实体,值对象),newable对象的另一个特点是,他们不应该持有的引用可注射的对象
但在编写代码时,我们经常会需要“注入”一个服务器冰(注入)到一个实体(新)
我一直在想,也许暴露在一个新对象的服务依赖项更好地做它在方法级别,但这听起来像很多工作要做....只是想着每一个方法被调用时解析依赖....嗯,这闻起来像,我们将不得不使用服务定位器反模式
我已经解决了这一问题的方法是:
创建一个暴露依赖关系的方法的接口(该服务将用于此方法)
为接口创建一个扩展方法,并将其放置在不同的命名空间,也许在另一个程序集,只是包裹在调用原始的方法使用一个服务定位器
解决依赖这样做,我们有newable和注射对象之间的一致与分离使用的服务在我们的newables容易
- 你怎么想的能力吗?
- 在扩展方法中使用服务定位器被认为是不好的做法?
- 你将如何单元测试扩展方法调用?
但在编写代码时,我们经常需要“注入”的服务 (注射)到实体(newable)
这不是个案,如果你发现需要做到这一点,那么应该在服务中的实体中存在一些功能。
假设您的新程序为ShoppingCart
,而您的注射器为数据库repository
。你想能够做到这一点:
// somehow cart already got the repository
cart.save();
那么,你做错了。相反,你需要切换周围的东西和做的事:
respository.save(cart);
如果你能提供当你觉得需要这样做的情况下,我们可以讨论这种情况的细节。
密切相关:http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to-resolve-dependencies-for-entities-business-objec – Steven 2012-03-14 11:28:41
这个链接真的有用 – Jupaol 2012-03-14 12:53:17