Question

J'essaie de comprendre les éléments internes de la base de flux de travail Windows. Nous avons donc certains composants logiciels et nous les entremêlons sous forme de flux de travail, qu'il s'agisse d'un flux de travail séquentiel basé sur des conditions ou d'un flux de travail de machine à états. Maintenant, je pense (je me trompe peut-être ici) que cela ne s'applique pas de la même manière à IoC + Dependency Injection (via Unity ou Spring.net). Quand utiliser quoi ?? Est-ce que je pense même correctement?

Était-ce utile?

La solution

Je ne suis pas tout à fait sûr de comprendre la question, mais je vais quand même essayer.

WF n'utilise pas de conteneur IOC. Il utilise le modèle ServiceLocator dans lequel vous ajoutez des dépendances au runtime de workflow, au localisateur de service et aux activités de workflow, puis récupérez ces services à partir du runtime de workflow.

Un modèle ServiceLocator et un modèle IOC sont similaires et ont le même objectif de découplage des dépendances. L'approche est différente dans un conteneur IOC qui insère des dépendances alors qu'un ServiceLocator est utilisé pour les extraire.

J'espère que cela répond à votre question et si ce n'est pas le cas, je tenterais de reformuler la question initiale.

Autres conseils

Je me demandais comment utiliser les composants fournis et gérés par mon conteneur IOC à partir de flux de travail également. Comme l’indique l’autre réponse, les instances de flux de travail souhaitent utiliser service-locator pour extraire des services du moteur d’exécution au lieu d’injecter les dépendances.

Un moyen facile de combler le fossé consiste à supprimer les dépendances de votre conteneur IOC au moment de la configuration du moteur d'exécution WF, puis à utiliser AddService pour les placer dans le moteur d'exécution. Vos flux de travail peuvent remplacer OnActivityExecutionContextLoad et utiliser la méthode GetService sur le fournisseur de services pour les repousser de l'exécution et les transférer dans les propriétés publiques [NonSerialized] du flux de travail. Vous avez ensuite accès aux services des activités de code, etc.

Vous pourriez également être en mesure de préparer un service d'exécution qui injecte des dépendances lors de l'activation des instances de flux de travail.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top