2011-08-26 59 views
1

可能有人请帮助我明白团结就是什么,它是如何简化编码在下面的例子:统一2.0的说明,请

正常码

FileLogger myLogger = new FileLogger(); 
FileLogger myLogger = new FastLogger(); 

统一包装箱代码

// Create container and register types 
IUnityContainer myContainer = new UnityContainer(); 
myContainer.RegisterType<ILogger, FileLogger>();  // default instance 
myContainer.RegisterType<ILogger, FastFileLogger>("FastLogger"); 
ILogger myLogger = myContainer.Resolve<ILogger>(); 

另外:

  1. 什么是Unity中的Container?
  2. 什么是解决?
  3. 什么是RegisterType。
  4. 什么意思是类型映射?
  5. 什么是国际奥委会

此外,如果两个类实现相同的接口,我们这样做下面的统一会发生什么:

container.RegisterType<IInvoicingService, InvoicingService>() 
     .RegisterType<IInvoicingService, ManagerService>(); 
IInvoicingService service = container.Resolve<IInvoicingService>(); 
service.GetCount(); 

看起来它会调用getCount方法上ManagerService。我应该怎么做才能在InvoicingServiceManagerService上调用GetCount

是的我已经阅读了CodePlex上的文档,它让我困惑不已!

+0

以下anwser可以帮助你:http://stackoverflow.com/questions/4612054/wpf-prism-what-is-a-unity-container –

回答

4

对于国际奥委会和/或依赖注入我可以推荐这个读:

http://martinfowler.com/articles/injection.html

这会帮助你得到一个更好地了解您可以使用此模式实现。 Unity可以帮助你在.NET中实现这种模式。

我会尽量回答与我所知,你的黑点的问题:

  • 您的容器就是:一个容器。它在那里存储映射。
  • “解析”将您的接口解析为具体接口实现的具体实例。但是,您只能在该接口上操作,因此可以交换实现(完成这件事的主要原因是什么)
  • “RegisterType”通常允许您为接口注册具体类。所以你基本上说:“这是接口,如果有人请求解决这个接口,返回这个具体类的一个实例”。正如你所看到的,你可以有默认和命名的类型映射。
  • 类型映射是接口和实现之间的映射。
+0

感谢@ UrbanEsc,感谢它。我在原始问题上增加了一个问题。 –

+0

马丁福勒+1。 – Yuck

+0

@flybyte回答你添加的问题:通过不传递第二个RegisterType调用的参数来覆盖默认的注册类型。要注册这两种类型,你需要传入一个标识符,一个文字。然后,您可以解除默认或命名类型。这是一个明确的解释? :) – UrbanEsc