ASP.NET MVC,Ninject,针对多个构造函数的每个请求的单个实例

时间:2010-10-09 20:10:40

标签: asp.net asp.net-mvc repository-pattern ninject unit-of-work

我试图通过将一个工作单元实例传递到我的存储库来实现一个工作单元模式。

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实例并传递到我的存储库(通过它们各自的构造函数)。

InRequestScope()上的IUnitOfWork方法绑定是否足够?如果不是我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:8)

您拥有的代码可以正常运行。只有IUnitOfWork的一个实例将被赋予任何请求它的类(通过构造函数/属性注入或调用内核的.Get<>等)。