13

私はWPFとCaliburn.Microを学んでいます。私はここに提示されたコードに従っています: http ://caliburnmicro.codeplex.com/wikipage?title = Customizing%20The%20Bootstrapper&referringTitle = Documentation

どうやらこのコードはSilverlight用ですが、私のプロジェクトはWPFであるため、CompositionHostが定義されていないというエラーが発生します。

ドキュメントには、コンテナをwpfで直接初期化する必要があると記載されていますが、その方法を示すドキュメントはありません。コンテナを直接初期化するにはどうすればよいですか?

編集1ドキュメントでは、ブートストラッパーは次のようになっています。

     container = CompositionHost.Initialize(
        new AggregateCatalog(
            AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()
            )
        );

    var batch = new CompositionBatch();

    batch.AddExportedValue<IWindowManager>(new WindowManager());
    batch.AddExportedValue<IEventAggregator>(new EventAggregator());
    batch.AddExportedValue(container);

    container.Compose(batch);

そして私はそれをに変換しました:

    var catalog =
            new AggregateCatalog(
                AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>());

        this.container = new CompositionContainer(catalog);
        var batch = new CompositionBatch();

        batch.AddExportedValue<IWindowManager>(new WindowManager());
        batch.AddExportedValue<IEventAggregator>(new EventAggregator());
        batch.AddExportedValue(this.container);

        this.container.Compose(batch);

しかし、アプリケーションを実行すると、MEFがIShellの実装を見つけることができないというエラーが発生します

     Could not locate any instances of contract IShell.

MEFの初期化が正しくないと思います。修正を手伝ってもらえますか?

4

1 に答える 1

18

CompositionContainerWPF では、明示的なコンストラクターを使用する必要があります。私の WPF と Silverlight 共有ブートストラップでは、次の#if-#elseディレクティブを使用しました。

#if SILVERLIGHT
    container = CompositionHost.Initialize(catalog);
#else
    container = new CompositionContainer(catalog); ;
#endif

編集

ブートストラップは、インターフェイスを実装するコンポーネントを識別するためIShell(ブートストラップが基本クラスを拡張しているBootstrapper<IShell>場合)、.IShell

通常、これはあなたのものShellViewModelで、宣言は次のようになります。

[Export(typeof(IShell))]
public class ShellViewModel : PropertyChangedBase, IShell
{
   ...
}

ブートストラップのセットアップとカスタマイズの詳細については、こちらを参照してください。

于 2012-09-20T15:16:02.967 に答える