Я использую шаблон структуры работы для взаимодействия с контекстом DB в приложении ASP.NET MVC. Я хочу использовать UoW для использования транзакций для службы Windows. Какую конфигурацию Ninject следует использовать, когда я связываю DBC-текст?Ninject Конфигурация для работы Конфигурация настройки работы для службы Windows
ответ
Первый, DbContext
- это единица работы. Вам не нужно будет внедрять один поверх него. На всякий случай вы не знали ;-)
Вам нужно будет определить свои границы транзакций. Не существует заранее определенного механизма обзора, такого как «InRequestScope» (кроме случаев, когда вы обрабатываете запросы WCF, тогда тоже будет).
Если вы создаете объект-поддерево для каждого запроса, вы можете использовать «InCallScope()», или вы можете определить свой собственный механизм определения транзакций и использовать «InScope (ctx => объект области видимости)». Убедитесь, что объект области реализует INotifyWhenDisposed
, иначе DbContext
не удаляется немедленно.
Если вы не создаете объект-поддерево для каждого запроса, вам нужно будет использовать фабрику для создания DbContext
за транзакцию и передать ее из метода в метод. В качестве завода вы можете просто ввести Func<DbContext>
(для этого требуется Ninject.Extensions.Factory)
Ninject.Extensions.UnitOfWork решает эту проблему.
Установка:
_kernel.Bind<IService>().To<Service>().InUnitOfWorkScope();
Использование:
using(UnitOfWorkScope.Create()){
// resolves, async/await, manual TPL ops, etc
}
настроить его, чтобы ввести свой DbContext в классы UOW в переходном объеме – Luke