在您的工作流程事件中可以使用DI吗?如果是的话,如何?
例如,如果您有类似的事件
public sealed class MyActivity : CodeActivity
{
public MyClass Dependency { get; set; }
protected override void Execute(CodeActivityContext context)
{
Dependency.DoSomething();
}
}
我该如何设置
Dependency
?(我正在使用Spring.Net)
最佳答案
工作流不使用IOC容器。它使用ServiceLocator模式,您可以在其中将依赖项作为扩展和工作流事件添加到工作流运行时,并通过上下文从工作流扩展中检索这些服务。
ServiceLocator和IOC模式相似,并且在解耦依赖项方面具有相同目的。尽管方法是在IOC容器中将依赖项插入,而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();
}
}
MyExtension类是此处的扩展,它没有基类或接口(interface)要求。