1

Unity DI と EntLib Service Locator を使用する小さなツールキットがあります。この問題は、サード パーティのアプリが EntLib サービス ロケータを使用しようとすると発生します。EntLib Service Locator はシングルトンのように見えるため、サードパーティ アプリがそのサービス ロケーターをブートストラップすると、サービス ロケーターの構成が消去されます。クライアントは、次の方法で Service Locator を作成します。

        container = new UnityContainer();
        locator = new UnityServiceLocator(Initialize());
        ServiceLocator.SetLocatorProvider(() => locator);

そして、次のように使用されます。

ServiceLocator.Current.GetInstance<IService>("MyService");

2 つの ServiceLocator を管理する方法や、実行時にサービス ロケーターに追加のコンポーネントを登録する方法はありますか?

4

2 に答える 2

13

Unity コンテナーはそれ自体に登録されているため、取得して構成できます。

var container = ServiceLocator.Current.GetInstance<IUnityContainer>();
// do what you want with container
于 2010-09-09T08:02:11.557 に答える
0

私が見つけた唯一の実行可能な解決策は、現在の IUnityContainer を ServiceLocator 用に構成してリサイクルすることです。そのために、次のようにリフレクションを使用しました。

var locator = (UnityServiceLocator) ServiceLocator.Current;
var field = locator.GetType().GetField("container", BindingFlags.NonPublic | BindingFlags.Instance);
if (field != null)
{
  var iocContainer = field.GetValue(ServiceLocator.Current) as IUnityContainer;
  if (iocContainer != null)
  {
   ConfigureContainer(iocContainer);
  }
}
于 2010-09-02T15:32:25.367 に答える