[英]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.