18

作業単位インスタンスをリポジトリに渡すことで、作業単位パターンを実装しようとしています。

Global.asaxからの関連コード。

public class SiteModule : NinjectModule
{
    public override void Load() {        
       Bind<IUnitOfWork>().To<SqlUnitOfWork>()
                          .InRequestScope()
                          .WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["Entities"].ConnectionString);

       Bind<IProductRepository>().To<ProductRepository>();
       Bind<ICategoryRepository>().To<CategoryRepository>();
    }
}


リポジトリコンストラクタ:

public class ProductRepository {
    IUnitOfWork unitOfWork;
    public ProductRepository(IUnitOfWork unitOfWork) {
        this.unitOfWork = unitOfWork;
    }
}

public class CategoryRepository {
    IUnitOfWork unitOfWork;
    public CategoryRepository(IUnitOfWork unitOfWork) {
        this.unitOfWork = unitOfWork;
    }
}


私が欲しいのは、SqlUnitOfWorkリクエストごとに最大1つのインスタンスが作成され、(それぞれのコンストラクターを介して)リポジトリに渡されることです。

バインディングのInRequestScope()方法はIUnitOfWork十分ですか?そうでない場合、どうすればこれを達成できますか?

4

1 に答える 1

8

あなたが持っているコードはうまくいくでしょう。のインスタンスは、IUnitOfWorkそれを要求するクラスに1つだけ与えられます(コンストラクター/プロパティインジェクションまたはカーネルの呼び出し.Get<>などを介して)

于 2010-10-14T01:26:23.757 に答える