Внедрение зависимостей / IoC в Workflow Foundation 4 - PullRequest
13 голосов
/ 30 сентября 2010

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

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

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

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

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

(я использую SpringNet)

1 Ответ

20 голосов
/ 30 сентября 2010

Рабочий процесс не использует контейнер 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 является здесь расширением и имеетнет требований к базовому классу или интерфейсу.

...