林学习asp.net的MVC 3.一个新的功能是依赖注入。有人能告诉我它是什么吗?为什么它有用?以及何时使用它?由于
什么是依赖注入?
回答
可能更适合于程序员,而是先了解控制
http://en.wikipedia.org/wiki/Inversion_of_control
http://www.martinfowler.com/articles/injection.html
反转的想法是,一个组件不应该知道如何获得/创建它的依赖,应该提供完成工作所需的内容。
依赖注入是为消费代码提供依赖关系的过程,而不是负责实例化对象本身的代码。在一个简单的例子中,您可能有一个负责计算所提供服务的发票的类。你可以立即使用它并将其称为“计算”方法:
public class InvoiceBiller
{
public void Bill()
{
Calculator calculator = new Calculator();
var totalAmountDue = calculator.CalculateBill(hoursWorked);
}
}
此方法依赖于Calculator类。这很好,它的工作原理。然而depenedency注入将有你“注入”计算器的依赖:
public class InvoiceBiller
{
private readonly Calculator calculator;
public InvoiceBiller(Calculator calculator)
{
this.calculator = calculator;
}
public void Bill()
{
var totalAmountDue = calculator.CalculateBill(hoursWorked);
}
}
正如你可以在InvoiceBiller类是通过它的构造(依赖注入的形式被称为构造函数注入)给出的计算器对象第二个例子中看到。 InvoiceBiller不再关心如何获取账单实例,而是简单地给它一个。
这有助于测试。你可以从你的测试中通过你想要的任何计算器实例。在实际产品运行时,您可以通过计算器连接到数据库并查看每小时的费率。为了测试您传递一个使用硬编码率的计算器,以便您的测试不需要访问数据库。
采取此基础上更进一步,你一般通过一个接口,而不是一个具体类型:
public class InvoiceBiller
{
private readonly ICalculator calculator;
public InvoiceBiller(ICalculator calculator)
现在你对编程接口而不是实现。再次从测试中,您可以使用模拟框架来创建您的界面类型的模拟并将其传递给类。
事实上,这里有两个问题。有“什么是依赖注入?”和“什么是MVC 3中新增的”增加了更多'依赖注入支持?“。
依赖注入是一种编程模式,当类没有定义其他类的新对象之前,他们使用它们(如某些电子邮件发件人类,需要在数据库中记录电子邮件不会创建新的记录器实例),但请求它在不知道它可能是哪个类的情况下提供(使用接口,在我们的例子中称为ILogger)。这里的记录器是一个依赖项,这个依赖项通过许多方式被请求/注入,或者被请求作为依赖类的构造函数参数(例如EmailSender),或者只是将它作为类“set”访问器的属性,等等...
有一些库称为依赖注入库,或控制容器的反转。那些库是用来定义哪些类应该在运行时真正使用的,以及要使用哪些其他特定值,并告诉它们为您创建对象(如创建EmailSender实例),递归地将所有依赖项传递给它们(所以,如果ILogger实际上是一个需要连接字符串的DBLogger,它也会发送它,等等。)。例子是温莎,Ninject,Autofac,微软团结,...
对于示例代码和更明显的例子,看到一个家伙这个漂亮的免费视频谁在使用ASP.NET MVC团队合作:
http://tekpub.com/view/concepts/1
ASP.NET MVC总是允许一个工厂类,您可以重写如何创建Controller类(以便您可以使用DI容器库创建控制器及其依赖关系,就像它是或EmailSender类一样)。什么排在ASP.NET MVC 3.0是在现有功能的改进,并提供更多的方法,如它,使它更容易做DI各地ASP.NET MVC
- Official ASP.NET MVC 3.0 Release Notes: Additional Dependency Injection Support
- http://blogs.microsoft.co.il/blogs/gilf/archive/2010/10/17/dependency-injection-in-mvc-3-was-made-easier.aspx
- http://johan.driessen.se/archive/2010/10/30/dependency-injection-in-asp.net-mvc-3-got-a-lot-simpler.aspx
和
- ASP.NET MVC 3 Service Location: Introduction (Part 1)
- ASP.NET MVC 3 Service Location: Controllers (Part 2)
- ASP.NET MVC 3 Service Location: Views (Part 3)
- ASP.NET MVC 3 Service Location: Filters (Part 4)
检查出来的深细节...
- 1. 什么是应用依赖注入
- 2. 什么是Spring对依赖注入的最小依赖?
- 3. 什么是依赖注入,为什么要使用它?
- 4. 依赖注入模式 - 它是什么,为什么我在乎?
- 5. 依赖注入 - 我错过了什么?
- 6. 什么依赖注入框架与WebForms
- 7. 什么时候使用依赖注入?
- 8. 依赖注入 - 注入容器还是个人依赖?
- 9. 什么是依赖注入用户输入的最佳策略?
- 10. 依赖注入
- 11. 依赖注入
- 12. 依赖注入
- 13. 依赖注入
- 14. 依赖注入
- 15. 依赖注入
- 16. 使用依赖注入来注入依赖注入器
- 17. 使用依赖注入优于新的优点是什么?
- 18. 注入依赖项的目的是什么
- 19. 什么是依赖注入的好隐喻?
- 20. 依赖注入@protocol?
- 21. 依赖注入`trait`
- 22. 依赖注入akka.net
- 23. 依赖注入UserControl
- 24. Wicket依赖注入
- 25. MVC依赖注入
- 26. C#依赖注入
- 27. 依赖注入wcf
- 28. Spring依赖注入
- 29. Wcf依赖注入
- 30. 依赖注入context.getbeans
重复的【什么是依赖注入?](http://stackoverflow.com/questions/ 130794 /什么,是依赖注入) – jfar 2011-01-14 05:36:49