1

在我的 Asp.Net MVC 项目中,我使用 NInject 提供程序来创建 UnitOfWork 的实例。(我使用 Mindscape.LightSpeed)

这是我的 NinjectModule 类中的绑定示例:

base.Bind<IUnitOfWork>().ToProvider(UnitOfWorkProvider<UnitOfWork>.CreateInstance(_lightSpeedContext, UnitOfWorkProvider.CreateUnitOfWork)).InRequestScope();

这是我在提供程序中创建实例的示例:

  protected override T CreateInstance(IContext context)
  {
     T unitOfWork = default(T);

     unitOfWork = this.CreateUnitOfWork();

     if (this.ConnectionStrategy != null)
        unitOfWork.ConnectionStrategy = this.ConnectionStrategy;

     return unitOfWork;
  }

像下面的例子那样使用互斥对象会更好吗?

  private static readonly Mutex _mutex = new Mutex();

  protected override T CreateInstance(IContext context)
  {
     _mutex.WaitOne();

     try
     {
        T unitOfWork = default(T);

        unitOfWork = this.CreateUnitOfWork();

        if (this.ConnectionStrategy != null)
           unitOfWork.ConnectionStrategy = this.ConnectionStrategy;


        return unitOfWork;
     }
     finally
     {
        _mutex.ReleaseMutex();
     }
  }

我在网上没有找到任何将互斥锁与 Ninject 提供程序一起使用的示例,这就是我问这个问题的原因。

最好能解释一下为什么互斥锁在 Asp.Net MVC 的上下文中好或不好。

非常感谢。

4

1 回答 1

0

IUnitOfWork当您声明您的请求范围时,为什么要使用互斥锁?

这将是您的 Web 应用程序的瓶颈,因为并行请求将等待另一个创建IUnitOfWork. 广泛使用的做法是为每个 Web 请求创建一个工作单元实例或数据库上下文(连接)等(IDisposable对象将在请求结束时处理)。即使你声明了你的组件InSingletonScope,Ninject 也应该处理并发问题。

于 2013-07-30T08:23:21.617 回答