繁体   English   中英

控制/依赖注入的反转,在.net中有很好的解释和示例?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM