異なる方法で注入依存関係ASP.NET MVCコントローラ?
-
20-08-2019 - |
質問
多くのサンプルを持っていweb、ディMVCコントローラはこのような
public ProductController(IProductRepository Rep)
{
this._rep = Rep;
}
カスタムControllerFactoryの使用を活用した、DIの枠組みの選択肢のリポジトリを噴射します。
理由は上記のがよいと考えられよ
public ProuctController()
{
this._rep = ObjectFactory.GetInstance<IProductRepository>();
}
これにより、同様の結果が必要としないカスタムコントローラー工場とする。
どの試験では、試験プログラムについては別途BootStrapper.この場合、コントローラが試されているもの偽のリポジトリが使用されていrealいていくともともと教室だったのです。
解決
コンストラクタの注最初のアプローチ)およびサービスロケータのパターンの第二のアプローチを用いる理由はいくつかあります。
第一に、サービスロケータ依存関係を隠.お二つ目の例では、公開インタフェースだけがわからない ProductControllers
必要なリポジトリ
また、もちろん、今年もエコー OdeToCode.と思い
IProductRepository repository = Mockery.NewMock<IProductRepository>();
IProductController controller = new ProductController(repository);
がより明確であるよ
ObjectFactory.SetFactory(IProductRepository, new MockRepositoryFactory())
IProductController controller = new ProductController();
特に、場合にはObjectFactory構成された試験器具の SetUp
方法。
最後に、サービスロケータのパターンを明らレポートは、アンケートの少なくとも一つの特定の場合:が書面でコードが消費されることによる人文書用します。Iウェイガーが、一般の人が好むコンストラクタの注その他ディの方法での適用のためのシナリオ.なぜな利用方法は全てのケースはどうでしょうか。
(マルタンファウラーには、より徹底した分析 "反転の制御を容器に依存注入パターン", 特に、"サービスロケータvs依存性注射").
他のヒント
第一の欠点は、第二のコンストラクタは、現在おIoCコンテナを適切に設定されています。このセットアップできるので実質的な負担としてのコードベースの成長とこの試験のシナリオとなります。この試験は一般的に読みやすくなり、維持す明示的にパスを試験しまいます。
保護主義に対する警戒レベルで結合膨大な数のクラスは特定のDI/IoCの枠組みる方法もあり抽象的で、もちろん、まだコードが散乱を通して授業を取得する依存関係.すべての枠組みがどのような依存関係が必要のコンストラクタでのコミュニケーションも楽しみの無駄な努力と重複コードです。
ご利用の際は第二のアプローチ、デメリット:
- 巨大では読めの試験設定-コンテキストメソッドが必要であ
- コンテナは連結されるコントローラー
- する必要がありまくりコード
なぜ使用したいiocコンテナとにかくしたくない場合に依存性注射