カスタム アクティビティ (CodeActivity) を持つ Windows ワークフロー ステート マシンを作成しました。これらのカスタム アクティビティはデータベースにアクセスする必要があり、データベース接続を含むプロパティがあります。
各アクションの開始時に、データベース コンテキストを初期化し、いくつかの処理を行ってから、データベース アクションを破棄します。これは現在問題を引き起こしています。これは、アクティビティがワークフローの 2 つの別々のインスタンスから同時に呼び出された場合に、コード アクティビティの同じインスタンスを使用できるという事実に帰着すると思います。
たとえば、私のアクティビティが DoSomething という名前で、次のようになっているとします。
public class DoSomething : CodeActivity
{
protected DbContext DbContext { get; set; }
protected override void Execute(CodeActivityContext context)
{
using (this.DbContext = CreateMyDatabaseContext())
{
DoSomething(this.DbContext);
}
}
}
ワークフローの 2 つのインスタンスが同時に DoSomething() を呼び出した場合、(DoSomething の同じインスタンスが使用されているため)、それらは同じデータベース コンテキストを指しています。
しかし、代わりに、アクティビティの呼び出しごとにアクティビティの新しいインスタンスを使用する必要があります。
これが不可能な場合は、アクティビティからインスタンス プロパティを削除する必要があることを理解しており、それは受け入れられる答えです。
しかし、インスタンス プロパティを使用できる別のメカニズムがあるかどうか疑問に思っています。たとえば、アクティビティ オブジェクトの作成方法を決定するワークフローにプロパティはありますか (ワークフローごとに個別のインスタンスなど)。それともそのようなものですか?
助けてくれてありがとう、エリック