0

CompositionRoot とは何かを理解しようとしています。

これまでのところ、それが何であるかについての詳細な説明は見つかりませんでした。何をしてはならないかについての短い声明だけです。

caliburn.micro を活用するときに付属する Bootstrapper は、「CompositionRoot」という意味ですか?

それとも、アセンブリ内にあるものとその依存関係のみを提供できるため、サービスロケーターのアンチパターンに近いですか。

誰かが CompositionRoot の適切な説明を持っている場合は、共有してください。私はすでにploehのブログを知っています。

CompositionRoot がより優れたアーキテクチャにつながる、および/または問題の解決に役立つことがわかった場合でも、その本を購入する意思はあります。しかし、私がそれが何を助けるかを見るのに十分な情報がないことを知っています.

アップデート

すべての ViewModel に EventAggregator が注入される (コンストラクター注入) としましょう。ここで、必要なときにこれらの ViewModel を動的に作成したいと考えています。タイプを事前に (CompositionRoot で) 登録することはできますが、後で依存関係を解決するにはどうすればよいでしょうか? 私が理解している限り、コンテナはコンポジションルートの後に触れるべきではありません。間違いなく、必要になる前にすべてのインスタンスを作成したくありません (アプリケーションの起動が遅くなります)。ここで「登録 - 解決 - 解放」という意味ですか? (そのパターンは ploeh ブログでも作り出されています)

4

1 に答える 1

0

http://blog.ploeh.dk/2011/07/28/CompositionRootで Mark の記事を見たことがあると思います。

それが述べているように:

コンポジション ルートは、モジュールが一緒に構成されるアプリケーション内の (できれば) 一意の場所です。

そして、これは次のようになります。

アプリケーションのエントリ ポイントにできるだけ近い。

Caliburn.Micro の場合、Bootstrapperクラスは、ConfigureContainerモジュールをオーバーライドして構成するためのメソッドを提供します。

理想的には、IoC コンテナーへの参照を持つのはコンポジション ルートのみです。

Caliburn.Micro はBootstrapper、コンテナーを介してシェル ビュー モデルを解決します (のジェネリック バージョンを使用している場合)。

IoCコンポジション ルートの外部でコンテナーを参照する必要がある場合は、サービス ロケーター (アンチ) パターンの実装である静的クラスも提供します。

アップデート

コンポジション ルートの後、実行時にコンテナーを介して型を解決する場合 (たとえば、複雑な依存関係チェーンがある場合) は、ファクトリ型を使用します。

これらのファクトリ タイプには、IoC コンテナーへの参照も含まれます。次のいずれかを実行できます。

  1. ファクトリ タイプへの依存関係としてコンテナへの参照を渡します
  2. 工場で Service Locator パターンを使用します (Caliburn.MicroIoCクラスなど) 。
  3. Castle Windsor や (拡張機能を使用して) Ninject などの一部の IoC コンテナーは、ファクトリ インターフェイスと規則に基づいてファクトリ タイプを生成します (これが最も優れたオプションです)。
于 2013-04-02T11:51:00.833 に答える