我正在使用工作单元设计模式与ASP.NET MVC应用程序中的DB上下文进行交互。我想使用UoW来使用Windows服务的事务。绑定DBContext时我应该使用哪些Ninject配置?
答案 0 :(得分:0)
首先,DbContext
是一个工作单元。你不需要在它上面实现一个。以防你不知道; - )
您必须定义自己的交易边界。没有像'InRequestScope'那样的预定义范围机制(除非您正在处理WCF请求,否则也会有。)
如果您正在为每个请求创建一个对象子树,您可以使用'InCallScope()',或者您可以定义自己的事务范围机制并使用'InScope(ctx =>范围对象)'。确保范围对象实现INotifyWhenDisposed
,否则DbContext
不会立即处理。
如果您没有为每个请求创建一个对象子树,那么您将需要使用工厂为每个事务创建DbContext
并将其从方法传递给方法。作为工厂,您只需注入Func<DbContext>
(这需要Ninject.Extensions.Factory)
答案 1 :(得分:0)
Ninject.Extensions.UnitOfWork解决了这个问题。
设定:
_kernel.Bind<IService>().To<Service>().InUnitOfWorkScope();
用法:
using(UnitOfWorkScope.Create()){
// resolves, async/await, manual TPL ops, etc
}