我目前正在努力了解如何在控制器类外使用依赖注入模式。依赖注入与多层应用程序
例如说,我有以下控制器:
public class TestController : Controller {
ILog logger;
public TestController(ILog log) {
logger = log;
}
public string TestMethod() {
businessLayer businessLayer = new businessLayer();
return businessLayer.DoSomethingAndLogIt();
}
}
据我所知,在大多数情况下是不能使用构造函数注入控制器类之外。因此不可能直接使用ILOG实现,即insdie“businesslayer”类。
一个简单的解决方案,我可以想像如下:
public class TestController : Controller {
ILog logger;
public TestController(ILog log) {
logger = log;
}
public string TestMethod() {
businessLayer businessLayer = new businessLayer(logger);
return businessLayer.DoSomethingAndLogIt();
}
}
所以传递的依赖从控制器到下伏层。但这是最好的方式吗?是否有更好的解决方案让我的businessLayer级访问ILog实现?
Thx!
Thx!有一件事我不明白的是IBusinessLayer如何使用ILog实现。但是大多数DI容器似乎能够在注册时解决这个问题。 http://simpleinjector.readthedocs.org/en/latest/using.html#automatic-constructor-injection-auto-wiring – mhtsbt 2015-02-24 07:12:20
@Matthias:这不是关于DI容器。每个类只需接受它(直接)需要的依赖关系作为构造函数参数,并在应用程序的启动路径中构建完整的对象图([Composition Root](http://blog.ploeh.dk/) 2011/07/28/CompositionRoot /))。你不需要一个DI容器来做到这一点,它甚至可以有利于不使用容器。另一方面,DI容器可以帮助使您的Composition Root更加可维护。 – Steven 2015-02-24 08:05:26