Зависимость впрыска /IoC в Workflow Foundation 4

Можно ли использовать DI в ваших рабочих процессах? и если да, то как?

Например, если у вас есть такая активность, как

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

    protected override void Execute(CodeActivityContext context)
    {
        Dependency.DoSomething();
    }
}

как я могу установить Dependency?

(Я использую Spring.Net)

Ответы

Ответ 1

Рабочий процесс не использует контейнер IOC. Он использует шаблон ServiceLocator, в котором вы добавляете зависимости к рабочему циклу рабочего процесса как расширения и действия рабочего процесса и извлекаете эти службы из расширений рабочего процесса через контекст.

Шаблоны ServiceLocator и IOC аналогичны и имеют одинаковую цель в зависимости от развязки. Атрибут apporach отличается, хотя в контейнерах 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 является расширением здесь и не имеет базового класса или требований к интерфейсу.