0

重複の可能性:
Unity で登録を重複排除することは可能ですか?

Unity xml 構成を使用して解決チェーンを構築しようとしています。私が得たのはそのようなものです:

interface IFoo{}
interface IBar : IFoo{}
class Impl : IBar{}

私が使用する構成は次のようになります。

<unity xmlns="schemas.microsoft.com/practices/2010/unity">
  <container>
    <register type="IBar" mapTo="Impl"/>
    <register type "IFoo" mapTo="IBar"/>
  </container>
</unity>

私が呼び出すとき

unityContainer.Resolve<IFoo>()

IBar を構築できないという例外を受け取りました。ここでマッピングされた型を Unity に再解決して Impl を返してもらいたいです。

これを行う方法はありますか?

4

2 に答える 2

2

流暢な登録を使用する場合は、次を使用できますInjectionFactory

 container.RegisterType<IBar, Impl>();
 container.RegisterType<IFoo>(new InjectionFactory(c => c.Resolve<IBar>()));

 var foo = container.Resolve<IFoo>();

しかし、残念ながら、InjectionFactoryxml構成には存在しないため、自分でxmlを解析する必要があります。

于 2012-10-10T09:14:28.080 に答える
0

Unity はこれを行いません。それを行うためにコンテナー拡張機能を作成できます。マッピングがなくなるまでマッピングを繰り返し検索し、最終的な場所を解決しようとする型マッピング戦略を置き換えます。

このように構築することは意識的な決定でした。このような登録の連鎖は人々を混乱させるだけだと考えられていました。例では明らかですが、実際の構成ファイルには数十のタイプがあり、実際に構成しているタイプをすぐに見つけることができなくなります。

したがって、あなたの場合は、次のことをお勧めします。

<register type="IFoo" mapTo="Impl"/>

そしてそれを良しとします。

于 2012-10-10T22:19:22.483 に答える