Domanda

Sto cercando di capire gli interni della base del flusso di lavoro di Windows. Quindi, abbiamo alcuni componenti software e li intrecciamo sotto forma di flusso di lavoro, sia esso un flusso di lavoro sequenziale basato sulle condizioni o un flusso di lavoro della macchina a stati. Ora, sto pensando (potrei sbagliarmi qui) che non si applica allo stesso IoC + Dependency Injection (tramite Unity o Spring.net). Quando usare cosa ?? Sto persino pensando bene ??

È stato utile?

Soluzione

Non sono sicuro di aver capito la domanda, ma ci proverò comunque.

WF non utilizza un contenitore IOC. Utilizza il modello ServiceLocator in cui si aggiungono dipendenze al runtime del flusso di lavoro, al localizzatore del servizio e alle attività del flusso di lavoro e si recuperano questi servizi dal runtime del flusso di lavoro.

Un modello ServiceLocator e IOC sono simili e hanno lo stesso scopo nel disaccoppiamento delle dipendenze. L'apporach è diverso anche se in un contenitore IOC che inserisce dipendenze mentre un ServiceLocator viene utilizzato per estrarre dipendenze.

Spero che questo risponda alla tua domanda e, in caso contrario, proverei a riformulare la domanda originale.

Altri suggerimenti

Ero alle prese con come utilizzare i componenti forniti e sottoposti a manutenzione dal mio contenitore IOC anche dai flussi di lavoro. Come afferma l'altra risposta, le istanze del flusso di lavoro vogliono utilizzare la localizzazione di servizi per estrarre i servizi dal runtime invece di ricevere le dipendenze.

Un modo semplice per colmare il divario è quello di rimuovere le dipendenze dal contenitore IOC nel momento in cui si imposta il runtime WF, quindi utilizzare AddService per metterle nel runtime. I flussi di lavoro possono sovrascrivere OnActivityExecutionContextLoad e utilizzare il metodo GetService sul fornitore di servizi per riportarli fuori dal runtime e inserirli in proprietà pubbliche [Non serializzate] sul flusso di lavoro. Hai quindi accesso ai servizi da attività di codice, ecc.

Potresti anche essere in grado di allestire un servizio di runtime che inietta dipendenze quando vengono attivate le istanze del flusso di lavoro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top