ASP.NET MVC, Ninject, один экземпляр на запрос для нескольких конструкторов - PullRequest
18 голосов
/ 10 октября 2010

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

Соответствующий код из 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?Если нет, то как мне этого добиться?

1 Ответ

8 голосов
/ 14 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...