2

ワークフローを持つ標準アプリケーションがあります。顧客はデザイナーでワークフローをカスタマイズできます。現在、特定の顧客向けにいくつかのカスタム アクティビティを作成しています。カスタム アクティビティは、インターフェイスによってビジネス レイヤーと通信しています。インターフェイスにそのインターフェイスの実装を与えるにはどうすればよいですか?

標準アプリケーションは、特定の顧客向けのカスタム コードであるため、インターフェイスとそのインターフェイスの実装について認識しないことが非常に重要です。アクティビティは標準ワークフローによって検出されるため、すでに機能しています。

拡張機能に関する多くの情報を目にしますが、それがどのように機能するかはよくわかりません。

カスタム アクティビティ

public sealed class GetDealerDetails : CodeActivity
{
    /////// <summary>
    /////// The dealer controller with all the businesslogic.
    /////// </summary>
    ////private readonly IDealerController _dealerController;

    [Inject]
    public IDealerController DealerController { private get; set; }

    ////public GetDealerDetails()
    ////{

    ////}

    ////[Inject]
    ////public GetDealerDetails(IDealerController dealerController)
    ////{            
    ////    _dealerController = dealerController;
    ////}

    protected override void Execute(CodeActivityContext context)
    {
        Dealer dealer = DealerController.GetDealerDetails(5);
    }
}

私は標準アプリケーションで Ninject を使用しています。コンストラクター注入とプロパティ注入を使用しようとしましたが、機能しません。DealerController滞在しますnull

編集 残りのコードはここにあります: Inject custom code in standard application

4

2 に答える 2

2

拡張機能は、フレームワークがワークフローへの挿入のために提供するものです。ワークフローを実行するときに、アクティビティで使用するすべての依存関係を追加します。

[Dependency]
public IMyService MyService{ get; set; }

WorkflowApplication instance = new WorkflowApplication(myWorkflow, inParameters);
instance.Extensions.Add(MyService);
instance.Run();

そして、それを使用するために、アクティビティで拡張機能を取得できます。

protected override void Execute(NativeActivityContext context){    
    var myservice = context.GetExtension<IMyService>();
    myservice.MyMethod();
    }

お役に立てば幸いです。

于 2013-04-03T16:53:43.450 に答える
2

インポートは、ninject で提供するワークフロー アプリケーション ラッパーを使用する必要があることです。それだけで活動を積み上げることができます。秘訣は次のとおりです。カスタム ワークフロー アクティビティでコンストラクター インジェクションを使用することはできません。活動はWFで非常に特別です。通常、ワークフローをコーディングすると、ラムダ式の new 演算子を使用してビルドし、遅延実行します。したがって、私の ninject 拡張機能は、アクティビティが既に構築されている場合にのみ魔法を働かせることができます。したがって、ninject のワークフロー アプリケーションでアクティビティ ツリーのルート アクティビティを渡す必要があります。これにより、アクティビティ ツリー全体が内部的に解決され、inject 属性で装飾されたすべてのプロパティが注入されます。

しかし、あなたの実際の問題は、私が今修正したライブラリのバグでした。BookmarkInfo デコレーターは、スコープ情報が常に設定されていると想定していましたが、そうではありませんでした。

于 2013-03-21T21:42:58.753 に答える