StructureMap を使用してリポジトリをコントローラー コンストラクターに挿入する標準 IoC セットアップの MVC プロジェクトがあります。
また、さまざまなコントローラーから呼び出すことができる共通のメソッドを持つことができる静的な「ユーティリティ」クラスが必要であると判断しました。たとえば、私は持っています:
public static IEnumerable<CountryCode> GetCountryList()
{
ICountryCodeRepository repo = ObjectFactory.GetInstance<ICountryCodeRepository>();
IEnumerable<CountryCode> countries = repo.GetAll();
return countries;
}
ご覧のとおり、これは ObjectFactory からリポジトリ オブジェクトを直接作成します。問題は、コントローラーを単体テストしたいときに、コントローラーのリポジトリをモックできるが、ユーティリティ クラス (コントローラーが最終的に呼び出す) のリポジトリをモックできないことです。他の理由があると確信しています。私のユーティリティ クラスは間違っていますが、これは私が今のところ見ているものです。また、私が持っているのはデザインが悪いと言っているものも読んだことがありますが、それを修正する方法がわかりません。
GetCountryList() 関数でレポ オブジェクトを受け入れることを考えていました
GetCountryList(ICountryCodeRepository _repo)
呼び出し元のコントローラーはそれを渡しますが、すべてのコントローラーがユーティリティ関数に必要なものを知る必要があるため、別の依存関係の問題が発生するだけではありませんか?
それとも、これらのユーティリティ メソッドを挿入するために何らかの方法で StructureMap を使用することは可能ですか?