Unity 2.0澄清请

时间:2011-08-26 11:40:32

标签: c# unity-container enterprise-library

有人可以帮助我理解Unity是什么以及它如何简化下面的示例编码:

普通代码

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

Unity容器代码

// 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中的容器是什么?
  2. 什么是Resolve?
  3. 什么是RegisterType。
  4. 类型映射是什么意思?
  5. 什么是IOC
  6. 如果两个类实现相同的接口,我们在Unity上执行类似下面的操作会发生什么:

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

    看起来它会调用getCount上的ManagerService方法。如何在GetCountInvoicingService上调用ManagerService

    是的我已经阅读了有关CodePlex的文档,它让我很困惑!

2 个答案:

答案 0 :(得分:4)

对于IOC和/或依赖注入,我可以推荐这个:

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

这可以帮助您更好地理解使用此模式可以实现的目标。 Unity可以帮助您在.NET中实现这种模式。

我将尽我所知来回答您的项目符号问题:

  • 你的容器只是:一个容器。它可以存储您的映射。
  • “Resolve”将您的Interface解析为该特定接口的实现的具体实例。但是,您只会在该接口上运行,因此可以实现可实现的交换(完成这一切的主要原因是什么)
  • “RegisterType”通常允许您为接口注册具体类。所以你基本上说:“这是接口,如果有人要求解析这个接口,则返回这个具体类的实例”。如您所见,您可以使用默认和命名的Type Mappings。
  • 类型映射是接口和实现之间的映射。

答案 1 :(得分:0)

这是一个描述统一性的博客条目的链接,以及如何在面向方面编程(AOP)和策略注入方面使用它的示例。该博客还包括3个来自Dino Espisito的MSDN艺术链接。

http://bardevblog.wordpress.com/2011/03/21/aop-policy-injection-with-unity/

希望这个