【问题标题】:Ninject Configuration to work Unit of Work configuration for Windows ServiceNinject Configuration to work Windows 服务的工作单元配置
【发布时间】:2015-05-26 09:20:58
【问题描述】:

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

【问题讨论】:

  • 将其配置为在瞬态范围内将您的 DbContext 注入到 UoW 类中

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


【解决方案1】:

首先,DbContext 是一个工作单元。您应该不需要在它之上实现一个。以防万一你不知道;-)


您必须定义自己的事务边界。没有像“InRequestScope”这样的预定义范围机制(除非您正在处理 WCF 请求,否则也会有)。

如果您为每个请求创建一个对象子树,您可以使用“InCallScope()”,或者您可以定义自己的事务范围机制并使用“InScope(ctx => scope object)”。确保作用域对象实现了INotifyWhenDisposed,否则DbContext 不会立即释放。

如果您没有为每个请求创建对象子树,那么您需要使用工厂为每个事务创建 DbContext 并将其从方法传递到方法。作为工厂你可以注入Func<DbContext>(这需要Ninject.Extensions.Factory

【讨论】:

    【解决方案2】:

    Ninject.Extensions.UnitOfWork 解决了这个问题。

    设置:

    _kernel.Bind<IService>().To<Service>().InUnitOfWorkScope();
    

    用法:

    using(UnitOfWorkScope.Create()){
        // resolves, async/await, manual TPL ops, etc    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多