0

將IUnityContainer用作工作流活動(WF 4.0)的擴展可以嗎?如何在工作流活動中正確使用Unity?

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

請給我一個例子如何做到這一點。

回答

3

我不想將容器放在擴展列表中。只需獲得你真正需要的擴展,IDatabaseContext在你的情況。較少通常更好。

關於包含依賴注入框架的最佳方法,一種方法是將WorkflowApplication或WorkflowInvoker對象包裝在支持Unity的實用程序類中,並提供所有接口/類型作爲內部WorkflowApplication的擴展。

另一個建議是在活動的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 
{ 
} 
0

This thread提供了代碼示例和鏈接,解釋如何實現您正在尋找的內容。

+0

我看着你提供的線索。但它並不像我這樣回答我的問題。 –

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 
{ 
} 
相關問題