0

Могу ли я контролировать, является ли действие рабочего процесса одиночным или нет? Я обнаружил, что один и тот же экземпляр класса активности в рабочем процессе (re) используется каждый раз, когда выполняется рабочий процесс.Экземпляр Workflow - одноэлементный? Контрольная деятельность?

Или просто сказал, что в методе Execute() метода активности я получаю другой context.WorkflowInstanceId, но тот же context.ActivityInstanceId.

Это по дизайну? По умолчанию?

Могу ли я контролировать ведение деятельности? Могу ли я иметь новый экземпляр активности каждый раз, когда выполняется рабочий процесс?

ответ

1

Да, это поведение по умолчанию. Экземпляр активности может быть одним и тем же экземпляром в среде, ориентированной на миллионы (веб-контекст), которая может вас укусить. Поэтому, чтобы быть в безопасности, вы всегда должны иметь все переменные активности в качестве аргумента. Аргументы передаются через ActivityContext, который отличается для каждого экземпляра активности.

public class CustomActivity : Activity 
{ 
    public int Age { get; set; } 

    protected override void Execute(CodeActivityContext context) 
    { 
     //do some work with Age 
    } 
} 

Поскольку различные потоки могут установить/получить ту же переменную экземпляра, вместо кода выше, вы должны сделать это:

public class CustomActivity : Activity 
{ 
    public InOutArgument<int> Age { get; set; } 

    protected override void Execute(CodeActivityContext context) 
    { 
     //do some work with Age within CodeActivityContext 
    } 
} 
+0

Что о зависимостях инжектированных через МОК? –

+0

Значения @MihaiBejenariu, введенные через ctor, будут храниться в свойствах-членах (независимо от контекста), поэтому IOC также не решает проблему. – rovsen

+0

Извините, мой вопрос был неясным. Я использую Unity, и у меня есть член класса: [Dependency] MyLogic. В этом случае MyLogic по-прежнему остается одиночным. Как я могу ввести введенный класс MyLogic для создания экземпляра в контексте? –

Смежные вопросы