nac*_*10f 8 asp.net-mvc dependency-injection
我确信我在这方面有点迷失...我的理解是依赖注入意味着初始化类所需的东西.例如.如果我的控制器需要一个服务,我希望能够测试它,那么我应该为它定义两个Constructor方法......所以,我的问题是......为什么人们使用Frameworks来实现这个?我迷路了
public class CompaniesController : Controller
{
private ICompaniesService _service;
public CompaniesController()
{
_service = new CompaniesService();
}
public CompaniesController(ICompaniesService service)
{
_service = service;
}
Run Code Online (Sandbox Code Playgroud)
一个主要原因是更好地支持单元测试和模拟对象以创建受控测试.
通过不在类中指定实现,您可以在运行时"注入"实现.(在您的示例中,ICompaniesService接口).
在运行时,使用诸如StructureMap,Unity或Castle Windsor之类的控制/依赖注入容器的反转,你可以说"嘿,任何时候有人想要ICompaniesService的实例给他们一个新的CompaniesService对象".
要对此类进行单元测试,您可以模拟我们的ICompaniesService并将其自己提供给构造函数.这允许您在模拟对象上设置受控方法.如果你不能这样做,那么对于CompaniesController的单元测试将仅限于使用公司服务的一个实现,这可能会影响实时数据库等,使你的单元测试既缓慢又不一致.
人们不会使用依赖注入框架来生成您在示例中提供的代码。这仍然是开发人员的工作。
当有人调用构造函数时,将使用依赖注入框架。框架将注入 ICompaniesService 的具体实现,而不是开发人员显式调用构造函数。
虽然它是一个特定的产品,但nInject 主页实际上有一些非常好的示例。
| 归档时间: |
|
| 查看次数: |
920 次 |
| 最近记录: |