.net 如何在工作流活动中正确使用Unity?

.net 如何在工作流活动中正确使用Unity?,.net,unity-container,workflow-foundation-4,workflow-foundation,.net,Unity Container,Workflow Foundation 4,Workflow Foundation,在工作流活动(WF 4.0)中使用IUnityContainer作为扩展是否可以 受保护的覆盖布尔执行(CodeActivityContext上下文) { var container=context.GetExtension(); var db=container.Resolve(); // ... } 请给我一个如何正确操作的示例。提供了代码示例和链接,说明如何实现您正在寻找的内容。提供了代码示例和链接,说明如何实现您正在寻找的内容。我不想将容器放在扩展列表中。只需获得您真正需要的扩展,ID

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

受保护的覆盖布尔执行(CodeActivityContext上下文)
{
var container=context.GetExtension();
var db=container.Resolve();
// ...
}

请给我一个如何正确操作的示例。

提供了代码示例和链接,说明如何实现您正在寻找的内容。

提供了代码示例和链接,说明如何实现您正在寻找的内容。

我不想将容器放在扩展列表中。只需获得您真正需要的扩展,IDatabaseContext。越少越好

关于包含依赖项注入框架的最佳方法,一种方法是将WorkflowApplication或WorkflowInvoker对象包装在支持Unity的实用程序类中,并将所有接口/类型作为内部WorkflowApplication的扩展提供

另一个建议是在活动的CacheMatadata方法中注册所需的扩展。此方法用于在工作流执行之前验证工作流

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
{
}
公共密封类样本活动:CodeActivity
{
受保护的覆盖无效缓存元数据(CodeActivityMetadata元数据)
{
//要求在工作流主机中定义IDatabaseContext扩展
//应用程序。如果扩展具有此
//未提供接口。
metadata.RequireExtension();
}
受保护的覆盖无效执行(CodeActivityContext上下文)
{
var dbContext=context.GetExtension();
}
}
公共接口IDatabaseContext
{
}

我会避免将容器放在扩展列表中。只需获得您真正需要的扩展,IDatabaseContext。越少越好

关于包含依赖项注入框架的最佳方法,一种方法是将WorkflowApplication或WorkflowInvoker对象包装在支持Unity的实用程序类中,并将所有接口/类型作为内部WorkflowApplication的扩展提供

另一个建议是在活动的CacheMatadata方法中注册所需的扩展。此方法用于在工作流执行之前验证工作流

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
{
}
公共密封类样本活动:CodeActivity
{
受保护的覆盖无效缓存元数据(CodeActivityMetadata元数据)
{
//要求在工作流主机中定义IDatabaseContext扩展
//应用程序。如果扩展具有此
//未提供接口。
metadata.RequireExtension();
}
受保护的覆盖无效执行(CodeActivityContext上下文)
{
var dbContext=context.GetExtension();
}
}
公共接口IDatabaseContext
{
}
公共密封类样本活动:CodeActivity
{
受保护的覆盖无效缓存元数据(CodeActivityMetadata元数据)
{
//要求在工作流主机中定义IDatabaseContext扩展
//应用程序。如果扩展具有此
//未提供接口。
metadata.RequireExtension();
}
受保护的覆盖无效执行(CodeActivityContext上下文)
{
var dbContext=context.GetExtension();
}
}
公共接口IDatabaseContext
{
}
公共密封类样本活动:CodeActivity
{
受保护的覆盖无效缓存元数据(CodeActivityMetadata元数据)
{
//要求在工作流主机中定义IDatabaseContext扩展
//应用程序。如果扩展具有此
//未提供接口。
metadata.RequireExtension();
}
受保护的覆盖无效执行(CodeActivityContext上下文)
{
var dbContext=context.GetExtension();
}
}
公共接口IDatabaseContext
{
}

我查看了您提供的线程。但在我看来,这不像是对我问题的回答。我查看了你提供的线索。但在我看来,这并不是我问题的答案。
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
{
}