.NET 4.0 ASP.NET MVCアプリケーションがあり、WorkflowFoundation4.0もホストしています。このワークフロー内から、一部のカスタムワークフローアクティビティがコードを実行して、LinqtoSQLを使用してデータベースの更新を実行します。コードはメソッドの呼び出しで構成され、メソッドは他のメソッドなどを呼び出します。データアクセスファクトリを持つビジネスレイヤーもあり、データベース操作のメソッドを含むすべてのデータアクセスオブジェクトへのアクセスを提供します。
ここで、私のWFアクティビティがメソッドAを呼び出し、メソッドAが別のクラスのメソッドBを呼び出し、さらに別のクラスのメソッドCendDを呼び出すとします。これらの各メソッドで、データアクセスファクトリの同じインスタンスを取得して、すべてのデータベース操作が同じデータベーストランザクションで実行されるようにします。データアクセスファクトリのシングルトンパターンをどのように設計しますか?メソッドA、B、C、およびDは、Asp.NetMVCコントローラーからも呼び出すことができることに注意してください。
メソッドA、B、C、およびDがasp.net mvcコントローラーから呼び出されると、簡単に、HttpContextを使用してデータアクセスファクトリシングルトンを格納できるため、1つのhttpリクエスト内でデータアクセスの同じインスタンスも取得できます工場。
ただし、これらのメソッドがワークフローアクティビティから呼び出される場合、もちろんHttpContextはありません。スレッドの静的変数を試しましたが、Webアプリケーションでは、メソッドA、B、CenDが同じスレッドで呼び出されるかどうかはわかりません。CallContextも試しましたが、経験したことですが、常に同じインスタンスを取得しているわけではないため、CallContextも解決策ではないようです。
基本的に、問題は「asp.netアプリケーションで実行されているバックグラウンドプロセスでオブジェクトの同じインスタンスを取得する」と要約できます(このバックグラウンドタスクがWFアクティビティまたは別のバックグラウンド方法によって開始されたかどうかは関係ありません)タスク(例:Task <T>を使用)