1

假设我有一个名为 IPumaServices 的接口,并且我有两个实现它的类:POSiXmlServices 和 TaXmlServices。

现在我有了另一个名为 IPumaNotification 的接口,实现它的类称为 PumaNotification。PumaNotification 的构造函数接收 IPumaServices 实现。

我的问题:在 Unity 中,如何注册一个在构造函数中注入 POSiXmlServices 和另一个注入 TaXmlServices 的 PumaNotification 实现?

这就是我到目前为止所拥有的。

using (_unityContainer = new UnityContainer())
            {
              _unityContainer
              .RegisterType<IPumaServices, POSiXmlServices>("POSiXml")
              .RegisterType<IPumaServices, TaXmlServices>("TaXml")
              .RegisterType<IPumaNotification, PumaNotification>();
            }

我不知道如何使它符合我上面的要求。

我无法在线研究这个问题,因为我不确定如何描述我面临的问题。

我很感激任何帮助。

4

1 回答 1

4

您可以在构造函数中指定解析的参数,从而解析您想要的实例:

using (_unityContainer = new UnityContainer())
        {
          _unityContainer
          .RegisterType<IPumaServices, POSiXmlServices>("POSiXml")
          .RegisterType<IPumaServices, TaXmlServices>("TaXml")
          .RegisterType<IPumaNotification, PumaNotification>(
              new InjectionConstructor(                        // Explicitly specify a constructor
                 new ResolvedParameter<IPumaServices>("TaXml") // Resolve parameter of type 
              );
        }

如果您想注册两个IPumaServices,您可以适当地命名每个,并在使用时按名称解析它们。

于 2012-06-04T18:29:25.570 回答