C# 工作流基础4中的依赖注入/ IOC

C# 工作流基础4中的依赖注入/ IOC,c#,dependency-injection,workflow-foundation,workflow-foundation-4,spring.net,C#,Dependency Injection,Workflow Foundation,Workflow Foundation 4,Spring.net,是否可以在工作流活动中使用DI?如果是,怎么做 例如,如果您有一项活动,如 public sealed class MyActivity : CodeActivity { public MyClass Dependency { get; set; } protected override void Execute(CodeActivityContext context) { Dependency.DoSomething(); } } 如何设置依

是否可以在工作流活动中使用DI?如果是,怎么做

例如,如果您有一项活动,如

public sealed class MyActivity : CodeActivity
{
    public MyClass Dependency { get; set; }

    protected override void Execute(CodeActivityContext context)
    {
        Dependency.DoSomething();
    }
}
如何设置依赖关系


(我使用的是Spring.Net)

工作流不使用IOC容器。它使用ServiceLocator模式,将依赖项作为扩展和工作流活动添加到工作流运行时,并通过上下文从工作流扩展中检索这些服务

ServiceLocator和IOC模式类似,在解耦依赖项方面具有相同的目的。apporach是不同的,尽管在IOC容器中,使用ServiceLocator将依赖项推入,而使用ServiceLocator将依赖项拉出

示例活动:

public class MyBookmarkedActivity : NativeActivity
{
    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        base.CacheMetadata(metadata);
        metadata.AddDefaultExtensionProvider<MyExtension>(() => new MyExtension());
    }

    protected override void Execute(NativeActivityContext context)
    {
        var extension = context.GetExtension<MyExtension>();
        extension.DoSomething();

    }
}
公共类MyBookmarkedActivity:NativeActivity
{
受保护的覆盖无效缓存元数据(NativeActivityMetadata)
{
base.CacheMetadata(元数据);
metadata.AddDefaultExtensionProvider(()=>newMyExtension());
}
受保护的覆盖无效执行(NativeActivityContext上下文)
{
var extension=context.GetExtension();
扩展。DoSomething();
}
}

MyExtension类是此处的扩展,它没有基类或接口要求。

谢谢您的回答。是否有任何示例/教程可用?再次感谢。但像这样,我必须在活动中添加扩展。在我们的例子中,活动没有构造扩展的诀窍。当工作流实例由框架构造时,在哪里可以添加扩展?您还可以向WorkflowInvoker、WorkflowApplication或WorkflowServiceHost添加扩展。将Extensions集合与前2个一起使用,WorkflowExtensions集合与WorkflowServiceHost一起使用。好的,我知道了:-)我还找到了关于iis托管工作流(未测试)的信息。仅供参考,我在工具包项目中创建了一些提供此功能的自定义活动。我将其称为依赖解析(如图所示,服务定位器为Maurice)。它将处理活动持久性场景,并在完成时清除任何依赖项。您还可以自己添加一个简单的DI容器作为扩展,并使其易于从Execute方法的上下文访问。