在.NET中详细解释和举例说明控制反转/依赖注入?

5

你好

我对.net框架中的IoC/DI框架了解不多。有人能给我一些链接,详细解释IoC/DI并提供一些C#示例吗?我想浏览一下,并更加了解这些框架。

这样我就可以知道在实现项目时在哪里和如何使用这些框架。



nrk


https://dev59.com/xHRB5IYBdhLWcg3wCjYV - Mauricio Scheffer
4个回答

12

2
你最好查看国际奥委会/残奥会的网站之一。

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容器的示例

1
Aim Kai提到了一些非常好的关于具体IOC容器实现以及相应教程的资源,但它们过于专注于正在讨论的IOC容器,而缺乏一般的介绍和教程。个人而言,我更喜欢Rob Connery撰写的introduction最为优秀。

0

这一切都与松耦合有关。

想象一下,您有一个依赖于类bar的类foo。

public class Foo
{
      public Foo(Bar bar)
      {
      }
}

在这里,我们必须将 bar 的实例传递到类中以实例化它。如果我们想要有两个不同的 Bar 实现,一个用于与数据库交互,另一个用于测试,会发生什么?

那么我们将创建并使用 IBar 接口,然后我们可以使用两个具体的实现。

现在考虑我们有很多复杂的依赖关系存在于很多类中,在很多地方被调用,如果我们想要更改实现,我们必须更改每个创建实现 IBar 对象的地方的代码,这可能是很多工作。

相反,我们可以像这样使用依赖注入。

IUnityContainer myContainer = new UnityContainer();
myContainer.RegisterType<IBar, Bar>();
Foo foo = myContainer.Resolve<Foo>();

在这里,Unity框架已经将一个Bar对象插入到Foo的构造函数中,如果您在一个地方更改了类型注册,则会更改整个地方解析Foo对象的方式。

当您拥有可能发生更改的复杂依赖关系时,依赖注入是必不可少的!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接