簡體   English   中英

自定義工作流程活動中的依賴注入

[英]Dependency injection in custom workflow activity

我有一個具有工作流程的標准應用程序。 客戶可以在設計器中自定義工作流程。 現在,我們正在為特定客戶進行一些自定義活動。 定制活動通過接口針對業務層進行通信。 如何為接口提供該接口的實現?

標准應用程序不知道該接口和該接口的實現是非常重要的,因為它是該特定客戶的自定義代碼。 該活動是通過標准工作流程找到的,因此已經可以工作了。

我看到了很多有關擴展的信息,但我真的不知道它是如何工作的。

自訂活動

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

編輯其余代碼可在此處找到: 在標准應用程序中注入自定義代碼

導入是您必須使用我隨ninject提供的工作流應用程序包裝器。 只有這樣,我才能開展活動。 訣竅如下:不能將構造函數注入與自定義工作流程活動一起使用。 WF中的活動非常特殊。 通常,當您對工作流程進行編碼后,您便會在lambda表達式中構建新的運算符,然后對其進行延遲執行。 因此,我的ninject擴展只能在活動已經建立時發揮其魔力。 因此,您需要在ninject的工作流應用程序中傳遞活動樹的根活動。 然后,這確實在內部解析了整個活動樹,並注入了所有用inject屬性修飾的屬性。

但是您的實際問題是我現在已修復的庫中的錯誤。 BookmarkInfo裝飾器假定始終設置范圍信息,而事實並非如此。

擴展是框架為工作流中的注入提供的功能。 執行工作流程時,添加將在活動中使用的所有依賴項。

[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();
    }

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM