Подтвердить что ты не робот

ASP.NET MVC, Ninject, один экземпляр для запроса для нескольких конструкторов

Я пытаюсь реализовать единицу шаблона работы, передав единицу рабочего экземпляра в свои репозитории.

Соответствующий код из 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;
    }
}


Я хочу, чтобы для каждого запроса было создано не более 1 экземпляр SqlUnitOfWork и передается в мои репозитории (через их соответствующие конструкторы).

Является ли метод InRequestScope() для привязки IUnitOfWork достаточным? Если нет, то как я могу достичь этого?

4b9b3361

Ответ 1

Код, который у вас есть, будет работать нормально. Только один экземпляр IUnitOfWork будет предоставлен любому классу, который его запрашивает (через инсталляцию конструктора/свойства или вызовы ядра .Get<> и т.д.)