ASP.NET MVC, Ninject, один экземпляр на запрос на несколько конструкторов
-
29-09-2019 - |
Вопрос
Я пытаюсь реализовать единицу работы шаблона, передавая единицу приличия работы в моих репозитории.
Соответствующий код от 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
Привязка достаточно? Если нет, как я могу добиться этого?
Решение
Код, который у вас будет работать нормально. Только один экземпляр IUnitOfWork
будет дано любому классу, которое просит его (через инъекцию конструктора / свойства или призывы к ядру .Get<>
и т.д.)
Не связан с StackOverflow