Workflow nie korzysta z kontenera IoC. Wykorzystuje wzorzec ServiceLocator, w którym dodaje się zależności do środowiska wykonawczego przepływu pracy jako rozszerzenia i działania przepływu pracy oraz pobiera te usługi z rozszerzeń przepływu pracy przez kontekst.
Identyfikator ServiceLocator i IOC są podobne i mają ten sam cel w zależnościach od rozdzielania. Przypis jest inny, ale w kontenerze IOC pchającym zależności, podczas gdy ServiceLocator służy do wyciągania zależności.
Przykład działalność:
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();
}
}
Klasa MyExtension jest rozszerzenie tutaj i nie ma wymagań klasy bazowej lub interfejsu.
Możesz także dodać prosty kontener DI samodzielnie jako rozszerzenie i uczynić go łatwo dostępnym z kontekstu metody Execute. http://blog.petegoo.com/index.php/2010/08/16/unit-test-workflow-4-activities-dependency-injection/ –
Do tej pory utworzyłem kilka niestandardowych działań w moim projekcie zestawu narzędzi, który zapewnia to funkcjonalność. Określiłem to jako metodę rozwiązywania zależności (Service Locator jak Maurice, jak wskazano). Zajmie się scenariuszami trwałości działań i oczyści wszelkie zależności po ich zakończeniu. http://www.neovolve.com/post/2010/10/01/Custom-Windows-Workflow-activity-for-dependency-resolutione28093Wrap-up.aspx –