flusso di lavoro non usa un contenitore CIO. Utilizza il pattern ServiceLocator in cui aggiungi dipendenze al runtime del flusso di lavoro come estensioni e attività del flusso di lavoro e recuperi questi servizi dalle estensioni del flusso di lavoro attraverso il contesto.
Un modello ServiceLocator e IOC sono simili e hanno lo stesso scopo nelle dipendenze di disaccoppiamento. L'apporach è diverso in un contenitore IOC che spinge le dipendenze mentre un ServiceLocator viene utilizzato per estrarre le dipendenze.
attività Esempio:
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();
}
}
La classe myextension è l'estensione qui e non ha requisiti della classe di base o di interfaccia.
È anche possibile aggiungere un semplice contenitore DI come estensione e renderlo facilmente accessibile dal contesto del metodo Execute. http://blog.petegoo.com/index.php/2010/08/16/unit-test-workflow-4-activities-dependency-injection/ –
FYI, Ho creato alcune attività personalizzate nel mio progetto di toolkit che forniscono questo funzionalità. L'ho definita risoluzione di dipendenza (Service Locator come Maurice come indicato). Si prenderà cura degli scenari di persistenza delle attività e pulirà tutte le dipendenze quando avranno finito. http://www.neovolve.com/post/2010/10/01/Custom-Windows-Workflow-activity-for-dependency-resolutione28093Wrap-up.aspx –