3

モジュール内にリージョン アダプタを登録することはできますか?

Shell.xaml に ContentControl をリージョン "MainRegion" に設定しており、現在、AvalonDock コントロールを含むモジュールが取り込まれています。現在、シェル アプリに AvalonDock リージョン アダプターがありますが、それをモジュールに配置してそれ自体を登録したいと考えています。AvalonDock 以外のものを使用することにした場合に、シェル アセンブリを変更する (avalondock リージョン アダプターを削除する) ことなく、別のモジュールを簡単に使用できるように、このプログラムの柔軟性を維持したいと考えています。

このようなことが可能だと思います。誰もこれを以前にやったことがありますか?

現在、ブートストラップでは次のとおりです。

protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
    RegionAdapterMappings mappings = base.ConfigureRegionAdapterMappings();
    var regionBehaviorFactory = Container.GetExportedValue<IRegionBehaviorFactory>();
    var regionManager = Container.GetExportedValue<IRegionManager>();
    mappings.RegisterMapping(typeof(Pane), new AvalonRegionAdapter(regionBehaviorFactory, regionManager));

    return mappings;
}

これは、シェル ブートストラップの代わりにモジュールで実行したいことです。

4

1 に答える 1

4

コードプレックスからの回答はこちら http://compositewpf.codeplex.com/discussions/250892

あなたが説明しているシナリオは可能です。カスタム リージョン アダプターは Bootstrapper の ConfigureRegionAdapterMappings メソッドの RegionAdapterMappings に登録されることを意図していますが、モジュール内からカスタム リージョン アダプターを登録することは可能です。

たとえば、コンストラクター インジェクションを使用して Module クラスの RegionAdapterMappings への参照を取得し、そこで RegisterMapping メソッドを呼び出すことができます。これが可能なのは、RegionAdapterMappings を共有エクスポートとしてエクスポートする MefRegionAdapterMappings という名前のクラスがあるためです。これにより発生する可能性のあるタイミングの問題に注意する必要があります。そのアダプターを使用する領域を作成する前に、カスタム マッピングを登録するように注意する必要があります。

于 2011-03-23T17:11:05.457 に答える