有人可以解释微软统一?

我一直在阅读有关Unity(dependency injection,控制反转)的MSDN上的文章,但我想我需要用简单的术语(或简单的例子)来解释它。 我熟悉MVPC模式(我们在这里使用它),但是我还不能真正掌握这个Unity的东西,而且我认为这是我们应用程序devise的下一步。

Unity只是一个IoC“容器”。 谷歌结构图,并试试它。 我认为,当IoC的东西对你来说是新的时,更容易一点。

基本上,如果你了解IoC,那么你就明白你正在做的是颠倒对象创build时的控制。

没有Ioc:

public class MyClass { IMyService _myService; public MyClass() { _myService = new SomeConcreteService(); } } 

使用IoC容器:

 public class MyClass { IMyService _myService; public MyClass(IMyService myService) { _myService = myService; } } 

如果没有IoC,那么依赖IMyService的类必须新build要使用的具体服务版本。 这是不利的,原因很多(你已经将你的类与IMyService的具体版本联系起来,你不能轻易地进行unit testing,不能轻易改变它等等)

使用IoC容器,您可以“configuration”容器来为您解决这些依赖关系。 因此,使用基于构造函数的注入机制,只需将接口传递给IMyService依赖项即可。 当您使用容器创buildMyClass时,您的容器将为您parsingIMyService依赖项。

使用StructureMap,configuration容器如下所示:

 StructureMapConfiguration.ForRequestedType<MyClass>().TheDefaultIsConcreteType<MyClass>(); StructureMapConfiguration.ForRequestedType<IMyService>().TheDefaultIsConcreteType<SomeConcreteService>(); 

所以你所做的是告诉容器:“当有人请求IMyService时,给他们一个SomeConcreteService的副本。 而且你还指定了当有人要求MyClass时,他们得到一个具体的MyClass。

这完全是一个IoC容器。 他们可以做更多的事情,但这是它的主旨 – 他们为您解决依赖关系,所以您不必(并且不必在整个代码中使用“new”关键字)。

最后一步:当你创build你的MyClass时,你可以这样做:

 var myClass = ObjectFactory.GetInstance<MyClass>(); 

希望有所帮助。 随时给我发电子邮件。

我刚刚观看了由David Hayden提供的30分钟统一dependency injectionIoC Screencast,并认为这是一个很好的例子。 这里是演出笔记的片段:

截屏显示了Unity IoC的几种常见用法,例如:

  • 创build不在容器中的types
  • 注册和解决TypeMappings
  • 注册和parsing命名的TypeMappings
  • Singletons,LifetimeManagers和ContainerControlledLifetimeManager
  • 注册现有的实例
  • 向现有实例注入依赖关系
  • 通过App.config / Web.config填充UnityContainer
  • 通过注入API指定相关性,而不是依赖性属性
  • 使用嵌套(父 – 子)容器

Unity是一个类似于许多其他库的库,可以让您获得所需types的实例,而无需自己创build它。 如此给予。

 public interface ICalculator { void Add(int a, int b); } public class Calculator : ICalculator { public void Add(int a, int b) { return a + b; } } 

当使用类似ICalculator的IoC(反转控制)(这个例子是理论上的,技术上不正确的)时,你会使用像Unity这样的库来注册计算器。

 IoCLlibrary.Register<ICalculator>.Return<Calculator>(); 

所以现在当你想要一个ICalculator的实例,你只是…

 Calculator calc = IoCLibrary.Resolve<ICalculator>(); 

通常可以将IoC库configuration为每次parsing某个types时都保存一个单例或创build一个新实例。

现在让我们假设你有一个依赖ICalculator的类来存在

 public class BankingSystem { public BankingSystem(ICalculator calc) { _calc = calc; } private ICalculator _calc; } 

你可以设置库来创build一个对象到构造函数中。

所以DI或dependency injection意味着注入其他可能需要的对象。

这个家伙WilcoxTutorials给出了针对初学者的Unity容器的一个很好的演示。

第1部分: http : //www.youtube.com/watch?v=CWwe9Z0Gyew

第2部分: http : //www.youtube.com/watch?v = PsIbevgzQQE

在不到半个小时的时间里,您将了解基础知识!

Unity是一个IoC。 IoC的要点是抽象types之外的types之间的依赖关系。 这有几个好处。 首先,它是集中完成的,这意味着当依赖关系发生变化时(这可能是unit testing的情况),您不必更改大量的代码。

此外,如果使用configuration数据而不是代码完成配线,则可以在部署后重新连接依赖关系,从而在不更改代码的情况下更改应用程序的行为。

MSDN有一个使用Unity的dependency injection开发者指南,这可能是有用的。

开发人员指南从什么是dependency injection的基础开始,并继续介绍如何使用Unity进行dependency injection。 截至2014年2月,开发者指南涵盖了2013年4月发布的Unity 3.0。