嗨
我对.net框架中的IoC / DI框架知之甚少。任何人都可以通过C#中的一些示例向我提供详细解释IoC / DI的链接吗?我想通过它,并对这些框架有更多的了解。
这样我就可以获得知识,在哪里以及如何使用这些框架对实现项目很有用。
NRK
答案 0 :(得分:12)
有关DI概念的一般性介绍,包括C#中的综合示例,您可能需要阅读我的书Dependency Injection in .NET。
答案 1 :(得分:2)
你最好的选择是看一下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--后者可能更容易理解和使用。
也要看看这个问题。 Examples of IoC Containers
答案 2 :(得分:1)
Aim Kai已经提到了一些关于具体的IOC容器实现和相应教程的非常好的资源,但是他们只关注所讨论的IOC容器,而不是一般的介绍/教程。
就个人而言,我喜欢introduction Rob Connery写得最好。
答案 3 :(得分:0)
一切都与松耦合有关。
想象一下,你有一个依赖于类栏的类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是必不可少的!