私は現在、MVC3を使用するWebアプリケーションを開発中です。 MVC3プロジェクトはサービスレイヤーを介してアプリケーションロジックにアクセスします。サービス層は、UnitOfWorkパターンでアクセスされるリポジトリを使用してデータベースにアクセスします。コントローラに注入されるサービスクラスの依存性注入
MVC3プロジェクトにサービスを注入するためにStructureMapをインストールしました。例コントローラは今、この
public class AccountManagementController : Controller
{
IAccountService accountService;
public AccountManagementController(IAccountService accountService)
{
this.accountService = accountService;
}
ようになり、私の問題は私のAccountServiceのクラスは構造マップは、それを作成する際のUnitOfWorkが注入持っている必要があるということです。現在私は2つのコントローラを持ってこれを処理します。 1つはインターフェースを取り、もう1つは具体的なクラスをインスタンス化します。
public class AccountService : IAccountService, IDisposable
{
private IUnitOfWork unitOfWork;
internal AccountService(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
public AccountService()
{
this.unitOfWork = new UnitOfWork();
}
これはコードの匂いのようです。これを処理するより正しい方法がありますか?
おかげで、 AFrieze
デフォルトのコンストラクタを削除します... –
私は、StructureMapを構成するための流暢なインターフェイスが何年も変わったと思いますので、どんなコードがどのバージョンで動作するか分かりません。しかし、必要に応じてブートストラップコードに特定の 'IUnitOfWork'実装を使用するよう指示することができます。ここを見てください:http://stackoverflow.com/q/289512/328193 – David
ありがとう、私は見てみましょう。これは私が一般的に避けようとしている私のウェブサイトからの私のDALへの参照を必要とするでしょう。 – AFrieze