Использование мьютекса с провайдером NInject для предотвращения многопоточного параллельного доступа

В моих проектах 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.

Большое спасибо.

1 ответ

Почему вы хотите использовать мьютекс, когда вы объявляете IUnitOfWork в объеме запроса?

Это было бы узким местом для вашего веб-приложения, потому что параллельные запросы будут ждать, пока другой создаст экземпляр IUnitOfWork, Широко используемая практика заключается в создании одного экземпляра единицы работы или контекста базы данных (соединения) и т. Д. Для каждого веб-запроса (IDisposable объекты будут расположены в конце запроса). Даже если вы объявите свой компонент InSingletonScope, Ninject должен позаботиться о проблемах параллелизма.

Другие вопросы по тегам