ASP.NET MVCを使ってWebプロジェクトを開発しているうちに、私は結合問題に挑戦しました。 カスタムコントローラファクトリ(またはMVC 3を使用している場合は依存関係リゾルバ)をビルドするとき、どこから依存関係を取得するかを知るためにこのファクトリが必要です。ここに私のコードは次のとおりです。Structure Map依存関係リゾルバをASP.NET MVC Webプロジェクトから正しく切り離すにはどうすればいいですか?
//from Global.asax.cs
DependencyResolver.SetResolver(new StructureMapControllerFactory());
class StructureMapControllerFactory: IDependencyResolver {
Container repositories;
public StructureMapControllerFactory()
{
repositories = new RepositoriesContainer();
}
//... rest of the implementation
}
class RepositoriesContainer: Container
{
public RepositoriesContainer()
{
For<IAccountRepository>().Use<SqlAccountRepository>();
//...
}
}
StructureMapControllerFactory
クラスはコントローラに依存性を注入するための責任があります。私が言ったように、これらの依存関係を見つける場所を知る必要があります(サービスやリポジトリの実装などの具体的なクラスを意味します)。
私はMySite.Data
という別のクラスライブラリを持っています。ここにはすべての実装の詳細があります。 IAccountRepository
のような契約は、図書館MySite.Contracts
に住んでいます。今、このMySite.Data
ライブラリをMVCプロジェクトから直接参照すると、自分のサイトとそのデータ取得の実装との間に依存関係が存在します。問題はどうすれば削除できますか?この場合のベストプラクティスは何ですか?
回避策がたくさんあると確信していますが、まだ見つからないだけです。
削除する正確な**依存関係を明らかにすることはできますか?何と何の間? –