5

同じアセンブリの 2 つのコピーが存在する場合 (おそらく誤って)、MEF が重複したモジュールをロードするのを防ぐにはどうすればよいですか?

  • Assembly1.dll

  • Assembly2.dll (Assembly1 のコピー)

    [ImportMany]
    public IList<IModule> Modules { get; private set; }
    
    public void BuildUp()
    {
        Modules = new List<IModule>();
    
        var catalog = new DirectoryCatalog(@".\Modules");
        var container = new CompositionContainer(catalog);
    
        container.ComposeParts(this);
    }
    
4

1 に答える 1

2

DirectoryCatalog を使用する代わりに、AggregateCatalog を使用します。モジュール ディレクトリ内のすべてのアセンブリを調べ、現在のアセンブリが既に処理されたアセンブリの複製であるかどうかを判断し、そうでない場合は、そのアセンブリの AssemblyCatalog を作成して AggregateCatalog に追加するコードを記述する必要があります。

ただし、名前の異なる 2 つの DLL が「同じ」アセンブリであることを検出するために、どのようなロジックを使用できるかは正確にはわかりません。

于 2009-11-10T16:57:24.997 に答える