Munq を使用して、オプションの依存関係のプロパティ インジェクションを行うことを検討しています。
注入されたクラスでこのようなことをしなくても、これは可能ですか?:
MunqDependencyResolver.Container.Resolve<TTpe>();
さらに、この状況で推奨されるプロパティ注入の使用 (オプションの依存関係) またはより良い代替手段はありますか?
Munq を使用して、オプションの依存関係のプロパティ インジェクションを行うことを検討しています。
注入されたクラスでこのようなことをしなくても、これは可能ですか?:
MunqDependencyResolver.Container.Resolve<TTpe>();
さらに、この状況で推奨されるプロパティ注入の使用 (オプションの依存関係) またはより良い代替手段はありますか?
コード内からコンテナーを呼び出すことは、通常はお勧めできません。これについては、Mark Seemannによる優れた記事があります。
プロパティの注入自体は問題ありませんが、一般的に次の 2 つの状況でのみ使用する必要があります。
それ以外の場合は、コンストラクター インジェクションを使用します。
Munq でプロパティ インジェクションを行う方法は次のとおりです。
container.Register<IDatabase>(c =>
new Database(c.Resolve<ILogger>())
{
// Property injection.
ErrorHandler = c.Resolve<IErorhandler>()
});
依存関係はほとんどオプションではないことに注意してください。オプションの依存関係は、アプリケーション コードをより複雑にします。これは、コードで 2 つのタイプの依存関係 (実装と null 値) を区別する必要があり、コード内で余分な if-null チェックが発生するためです。ほとんどの場合、単に依存関係を必須にし、代わりに空の実装 ( Null Object Pattern ) を挿入/登録することができます。