2

AggregateCatalogMEFを使用することに最初の亀裂を入れていますが、どこにとを作成する必要があるかを判断できないようですCompositionContainer。コードがどうあるべきかを示す多くの例を見つけました:

var moduleCatalog = new AggregateCatalog(
    new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()), 
    new DirectoryCatalog(moduleDir));
var container = new CompositionContainer(moduleCatalog);
container.ComposeParts(this);

しかし今、私はそれをどこに置くかを知る必要があります。行くべきか:

  1. App.xaml.cs
  2. MainWindow.xaml
  3. または私のViewModelsの1つで。

編集:もう少しグーグルするべきだった、私は私が探していたものを見つけたと思う。

アプリケーションおよびライブラリ内でのMEFのホスティング。

4

1 に答える 1

1

これを読んだ後、アプリケーションとライブラリ内でMEFをホストすることで、の構成をにMEF入れることができると判断しましたApp.xaml.cs

public partial class App : Application
{
    [Import]
    public Window TheMainWindow { get; set; }

    protected override void OnStartup(StartupEventArgs e)
    {
        var moduleCatalog = new AggregateCatalog(
            new AssemblyCatalog(typeof(App).Assembly), 
            new DirectoryCatalog(moduleDir));
        var container = new CompositionContainer(moduleCatalog);
        container.ComposeParts(this);
        base.MainWindow = TheMainWindow;
        TheMainWindow.Show();
    }
}

注意すべきいくつかのこと:

  • StartupUri="MainWindow.xaml"から削除する必要がありますApp.xaml
  • メインウィンドウのプロパティを作成し、importそれに設定する必要がありますbase.MainWindow
于 2012-08-31T22:25:12.387 に答える