Curiosità sul Runtime di Workflow Foundation

L’altro giorno girovagavo con Reflector all’interno del runtime di Workflow Foundation quando mi sono inbattuto in una cosa curiosa. Quando creiamo l’istanza del nostro workflow (prima ancora di startarlo) con l’istruzione:

WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(Workflow1));

Ad un certo punto dell’esecuzione e più precisamente durante la creazione dell’istanza dell’executor, viene eseguito questo metodo:

this.InitializeExecutor(key, context, executor1, workflowInstance);

Apparentemente nulla di strano….certo, se non fosse che il tipo di ritorno di questo metodo è un oggetto Activity!!!Sul momento non riuscivo a spiegarmelo. Mi chiedevo e ripetevo: “diamine….stò inizializzano l’executor e mi torna una activity??”.Ammetto di averci perso un po’ la tesa ma alla fine l’illuminazione: l’activity di ritorno è la root Activity!!!!

InitializeExecutor, attraverso il metodo GetRootActivity dell’oggetto WorkflowDefinitionDispenser, il quale, dopo una serie di controlli richiama il metodo LoadRootActivity, ritorna una istanza della prima Activity dello specifico workflow. Tale istanza, prima di essere rimandata al chiamante però, viene validata per essere certi che sia stata correttamente definita. E mi sembra ovvio: quando nel nostro codice faremo:

instance.Start();

il runtime saprà già qual’è la prima activity che dovrà essere eseguita e sarà certo che essa sarà eseguibile perchè già validata.

Per la serie….potevo vivere lo stesso senza saperlo ma sono contento di averlo scoperto Big Smile [:D] (che possa essere il nome di una nuova categoria del blog? PVLSSSMSCDAS – e pure peggio di VOTMDB di Lorenzo Stick out tongue [:P])