0

EventAggregator に関する Caliburn Micro のドキュメントから抜粋:

// Creating the EventAggregator as a singleton.
public class Bootstrapper : BootstrapperBase {
    private readonly SimpleContainer _container =
        new SimpleContainer();

     // ... Other Bootstrapper Config

    protected override void Configure(){
        _container.Singleton<IEventAggregator, EventAggregator>();
    }

    // ... Other Bootstrapper Config
}

// Acquiring the EventAggregator in a viewModel.
public class FooViewModel {
    private readonly IEventAggregator _eventAggregator;

    public FooViewModel(IEventAggregator eventAggregator) {
        _eventAggregator = eventAggregator;
    }
}

問題は、Bootstrapper によって作成された EA のインスタンスを VM に挿入する方法です。

var svm = new SomeViewModel(?);

Caliburn.Micro.IoC.Get メソッドを使用してみましたが、うまくいきませんでした...

4

2 に答える 2

7

いいえ、var svm = new SomeViewModel(?)サービスの場所がアンチパターンになりつつあるため、IoC.Get を使用していません。
記事の著者が提案するパターンはベスト プラクティスです。つまり、コンストラクター インジェクションを使用して、依存関係を必要とするオブジェクトに依存関係を注入する必要があります。
他の言い方はわかりませんが、アプリケーションをコンポーザブルにして、プレゼンテーション レイヤーのアーキテクチャを作成します。
私が言っていることに関連するいくつかの素晴らしいアイデアとそれに付随するアプリケーションが素晴らしいものであるため、スクリーン、コンダクター、コンポジションの記事を確認します.
依存性注入についても読みます。

于 2013-06-28T21:27:41.117 に答える
1

あなたが参照している記事を書きました。Sniffer は正しいです (緑色のチェックマークを彼に残してください)。Caliburn.Micro は、構成と呼ばれる概念に多額の投資を行っています。これが意味することは、オブジェクト グラフ全体が実行時に暗黙的に構築されるか、必要に応じて構成されるということです。

アイデアは、「シェル」ViewModel がブートストラッパーによって作成され、シェルが他の ViewModel などをグラフの下に作成するというものです。これにより、コンストラクター注入を使用できるようになり、最高の構成可能性が提供されます。

ただし、これが必要な機能ではない場合もあります。そのため、IoC クラスを介してサービス ロケーターを提供します。ただし、Sniffer が述べているように、サービス ロケーションのほとんどのユース ケースはアンチ パターンと見なされます。そのため、その使用法は厳しく精査する必要があります。

IoC と組み込みの依存関係コンテナーである SimpleContainer の両方に関する 2 つの新しい記事に最後の仕上げを行っています。これらがアップしたら、関連するリンクを EventAggregator ドキュメントに追加します。これにより、インジェクション サイトとベスト プラクティスに関するより多くのコンテキストが提供されるはずです。

于 2013-07-03T10:26:37.093 に答える