[英]Inversion of Control / Dependency Injection with good explanation and examples in .net?
你好
我对.net框架中的IoC / DI框架知之甚少。 任何人都可以通过C#中的一些示例向我提供详细解释IoC / DI的链接吗? 我想通过它,并对这些框架有更多的了解。
这样我就可以获得知识,在哪里以及如何使用这些框架对于实现项目非常有用。
NRK
有关DI概念的一般性介绍,包括C#中的综合示例,您可能需要阅读我的书籍.NET中的依赖注入 。
您最好的选择是查看IOC / DI网站之一
Spring.net http://www.springframework.net/
温莎城堡http://www.castleproject.org/container/index.html
结构图http://structuremap.sourceforge.net/Default.htm
关于IOC比较的好文章
http://blog.ashmind.com/index.php/2008/08/19/comparing-net-di-ioc-frameworks-part-1/
http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx
我希望有所帮助。 我个人使用过Spring.Net和Castle Windsor--后者可能更容易理解和使用。
也看看这个问题。 IoC容器的示例
Aim Kai已经提到了一些关于具体的IOC容器实现和相应教程的非常好的资源,但是它们只关注于所讨论的IOC容器,而不是一般的介绍/教程。
就个人而言,我喜欢Rob Connery最好的介绍 。
这一切都与松散耦合有关。
想象一下,你有一个依赖于类吧的类foo
public class Foo
{
public Foo(Bar bar)
{
}
}
这里我们必须将一个bar实例传递给类来实例化它。 如果我们想要有两个不同的Bar实现,一个用于与DB交互,一个用于测试,会发生什么?
那么我们将创建和接口IBar并使用它,然后我们可以使用两个具体的实现。
现在考虑到我们在许多类中有很多复杂的依赖关系,这些类在很多地方被调用,如果我们想要改变实现,我们必须在每个地方改变代码来创建实现IBar的对象,这可能是很多工作。
相反,我们可以像这样使用依赖注入。
IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<IBar, Bar>();
Foo foo = myContainer.Resolve<Foo>();
这里统一框架已经将一个Bar对象插入到Foo的构造函数中,如果你在一个地方改变了类型注册,你可以改变Foo对象在整个地方的解析方式。
当您有可能发生变化的复杂依赖关系时,DI是必不可少的!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.