私はキャッスル ウィンザーを使用する初心者です。Apress Pro Mvcの本でちょっと紹介されました。私が取り組んでいるプロジェクトでは; mvc コントローラー ファクトリの代わりに、castlewindsor コントローラー ファクトリを使用します。そのため、パラメーター化されたコンストラクターを使用でき、依存関係を注入できます。コンストラクターを経由せずにコントローラー クラスのプロパティに値を挿入するように windsorcontroller ファクトリに指示する方法はありますか? これを行いたい理由は、Logging 依存関係があるためです。メーラーへの依存; データベース依存性; テーマ エンジン依存性。コンストラクターでこの多くのパラメーターパラメーターを使用したくありません。
2 に答える
デフォルトでは、Windsor がサービスの実装を解決するときに、すべてのプロパティに満たすことができるパブリック セッターを設定します。
ただし、依存関係の解決をコンストラクターに配置することが理にかなっている場合があることに注意してください。これにより、インスタンスが常に有効な状態になることが保証されます。テストを書いている人が、どの依存関係を提供する必要があるかを知る必要性に夢中になる、単体テストのシナリオを考えてみましょう。すべての依存関係が c'tor に入ると、テスターはテスト対象のインスタンスに必要なすべての依存関係を (スタブまたはモックとして) 提供するしかありません。
とにかく、あなたの質問に関しては、Windsor は C'torとプロパティ インジェクションをデフォルトでサポートしています。
Castle Windsor は、入力方法を知っているパブリック セッターを使用して、すべてのプロパティを自動的に入力します。
これは、クラスがある場合を意味します
public MyClass {
public SomeDependency {get; set;}
}
コンテナーが SomeDependency の解決方法を認識できるように構成されている限り、コンテナーはそれを解決して挿入しようとします。
ときどき、このデフォルトの動作が面倒だと思うことがあります。 この機能により、プロセスをより細かく制御できます。