1

IPumaServices という名前のインターフェースがあり、それを実装する 2 つのクラス (POSiXmlServices と TaXmlServices) があるとします。

現在、IPumaNotification と呼ばれる別のインターフェイスがあり、それを実装するクラスは PumaNotification と呼ばれます。PumaNotification のコンストラクターは IPumaServices 実装を受け取ります。

私の質問: Unity で、コンストラクターに POSiXmlServices を注入する PumaNotification の実装と、TaXmlServices を注入する別の実装を登録するにはどうすればよいですか?

これは私がこれまでに持っているものです。

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 
              );
        }

2 つ登録する場合はIPumaServices、それぞれに適切な名前を付けて使用するときに名前で解決できます。

于 2012-06-04T18:29:25.570 に答える