1

Munq を使用して、オプションの依存関係のプロパティ インジェクションを行うことを検討しています。

注入されたクラスでこのようなことをしなくても、これは可能ですか?:

MunqDependencyResolver.Container.Resolve<TTpe>();

さらに、この状況で推奨されるプロパティ注入の使用 (オプションの依存関係) またはより良い代替手段はありますか?

4

2 に答える 2

3

コード内からコンテナーを呼び出すことは、通常はお勧めできません。これについては、Mark Seemannによる優れた記事があります。

プロパティの注入自体は問題ありませんが、一般的に次の 2 つの状況でのみ使用する必要があります。

  1. 依存関係は完全にオプションであり、依存関係がなくてもアプリケーションは正しく動作します。または、
  2. たとえば、循環依存が原因で、コンストラクターの挿入はできません。

それ以外の場合は、コンストラクター インジェクションを使用します。

Munq でプロパティ インジェクションを行う方法は次のとおりです。

container.Register<IDatabase>(c =>
    new Database(c.Resolve<ILogger>())
    {
        // Property injection.
        ErrorHandler = c.Resolve<IErorhandler>()
    });

依存関係はほとんどオプションではないことに注意してください。オプションの依存関係は、アプリケーション コードをより複雑にします。これは、コードで 2 つのタイプの依存関係 (実装と null 値) を区別する必要があり、コード内で余分な if-null チェックが発生するためです。ほとんどの場合、単に依存関係を必須にし、代わりに空の実装 ( Null Object Pattern ) を挿入/登録することができます。

于 2012-04-23T11:10:48.523 に答える