0

可以在工作流活动 (WF 4.0) 中使用 IUnityContainer 作为扩展吗?

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

请给我一个如何做正确的例子。

4

3 回答 3

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
{
}
于 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 回答