4

VSTO プロジェクトで MEF を使用し、次のようにコンテナーを定義します。

        var catalog = new AggregateCatalog();
        catalog.Catalogs.Add(new AssemblyCatalog(this.GetType().Assembly));
        catalog.Catalogs.Add(...);

        container = new CompositionContainer(catalog);
        container.SatisfyImportsOnce(this);

コードが使用する場所を除いて、さまざまなライブラリを使用してすべてがうまく機能しています

 ServiceLocator.Current.GetInstance<MyInterface>()

もちろん NullReferenceException をスローします

ServiceLocator が独自の dll にあると考えると、それをどのように配線するのか、それとも可能でしょうか?

4

1 に答える 1

3

わかりました、コンテナを定義する場所でこれを試すことができます:

var mefAdapter = new MefServiceLocatorAdapter(container);
ServiceLocator.SetLocatorProvider( () => mefAdapter);

MefServiceLocatorAdapter は Microsoft.Practices.Prism.MefExtensions 名前空間にあります。

**編集:
ただし、ServiceLocator の使用はアンチパターンと見なされ、IoC/DI の目的に反することに注意してください。

于 2012-09-28T15:41:01.143 に答える