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

StackOverflow https://stackoverflow.com/questions/3897690

Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top