0

IUnityContainer をワークフロー アクティビティ (WF 4.0) の拡張機能として使用しても問題ありませんか?

protected override bool Execute(CodeActivityContext context)
{
    var container = context.GetExtension<IUnityContainer>();
    var db = container.Resolve<IDatabaseContext>();
    // ...
}

正しく行う方法の例を教えてください。

4

3 に答える 3

3

コンテナーを拡張リストに入れることは控えたいと思います。本当に必要な拡張機能を取得するだけです。あなたの場合はIDatabaseContextです。通常は少ないほど良いです。

依存性注入フレームワークを含めるための最善の方法については、Unity をサポートするユーティリティ クラスで WorkflowApplication または WorkflowInvoker オブジェクトをラップし、内部の WorkflowApplication への拡張機能としてすべてのインターフェイス/タイプを提供することが 1 つの方法です。

もう 1 つの推奨事項は、必要な拡張機能をアクティビティの CacheMetadata メソッドに登録することです。このメソッドは、実行前にワークフローを検証する際に使用されます。

public sealed class SampleActivity : CodeActivity
{
    protected override void CacheMetadata(CodeActivityMetadata metadata)
    {
        // Require the IDatabaseContext extension to be defined in the workflow host
        // application. The workflow will fail validation if an extension with this
        // interface is not provided.
        metadata.RequireExtension<IDatabaseContext>();
    }

    protected override void Execute(CodeActivityContext context)
    {
        var dbContext = context.GetExtension<IDatabaseContext>();
    }
}

public interface IDatabaseContext
{
}
于 2012-10-04T05:49:26.610 に答える
0

このスレッドは、探しているものを実現する方法を説明するコード サンプルとリンクを提供します。

于 2012-10-03T18:19:09.253 に答える
0
public sealed class SampleActivity : CodeActivity
{
    protected override void CacheMetadata(CodeActivityMetadata metadata)
    {
        // Require the IDatabaseContext extension to be defined in the workflow host
        // application. The workflow will fail validation if an extension with this
        // interface is not provided.
        metadata.RequireExtension<IDatabaseContext>();
    }

    protected override void Execute(CodeActivityContext context)
    {
        var dbContext = context.GetExtension<IDatabaseContext>();
    }
}

public interface IDatabaseContext
{
}
于 2013-03-22T11:16:03.913 に答える