Ninject配置工作Windows服务的工作单元配置

时间:2015-05-26 09:20:58

标签: c# asp.net-mvc windows-services ninject unit-of-work

我正在使用工作单元设计模式与ASP.NET MVC应用程序中的DB上下文进行交互。我想使用UoW来使用Windows服务的事务。绑定DBContext时我应该使用哪些Ninject配置?

2 个答案:

答案 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    
}