4

長時間実行されるタスク (ドキュメント ストアへの書き込み、再インデックスのトリガーなど) のために新しいスレッドを開始する必要があります。

ASP.Net MVC Web サイトで Ninject を使用しています。本質的に、私は自分のオブジェクトをインスタンス化する Http リクエストから新しいスレッドを生成し、新しいスレッドで Http リクエストからデータベース接続などが使用されないようにしたいと考えています。スレッドを生成するために何を使用するか、または Web 要求コンテキストからデータベース セッションを再利用しないように Ninject を構成する方法がわかりません。

以下は、問題の基本的なシーケンス図です

Ninject の名前付きスコープについて少し読んだことがありますが、それが何らかの形で関連しているかどうかはわかりません。

Ninject スレッド スコープ

新しいスレッドを生成する CommandProcessor のコードは次のとおりです。

public class CommandProcessor
{
   private IKernel _serviceLocator;

   public CommandProc(IKernel serviceLocator)
   {
       _serviceLocator = serviceLocator;
   }

   public void Process<TCommand>(TCommand command) where T : ICommand
   {
       var commandHandlers = _serviceLocator.Get<ICommandHandler<TCommand>>();

       foreach (var commandHandler in commandHandlers)
       {
           // I want this call to be asynchronous
           commandHandler.Handle(command);
       }
   }
}

前もって感謝します、

ハミッシュ。

4

1 に答える 1

2

新しいスレッドを生成するときは、Ninject からスレッドで使用する新しいアクティベーション コンテキストを作成します。

        Thread thread = new Thread(new ThreadStart(() =>
            {
                using (IActivationBlock activation = kernel.BeginBlock())
                {
                    var commandHandlers = activation.Get<ICommandHandler<TCommand>>();

                    foreach (var commandHandler in commandHandlers)
                    {
                        commandHandler.Handle(command);
                    }
                }
            }));
        thread.Start();
于 2012-08-15T15:23:30.633 に答える