2

J'essaie de comprendre les composants internes de la fondation de workflow Windows. Nous avons donc des composants logiciels et nous les entrelacerons sous la forme d'un workflow, qu'il s'agisse d'un workflow séquentiel basé sur une condition ou d'un workflow de machine d'état. Maintenant, je pense (je peux me tromper ici) qui ne s'applique pas à IoC + Dependency Injection (via Unity ou Spring.net). Quand utiliser quoi ?? Est-ce que je pense même juste?Windows Workflow Foundation ou conteneur IoC + injection de dépendances?

+0

Y at-il un problème avec ma question ?? Son été 2 heures sans aucune réponse, il est si différent de StackOverflow – Perpetualcoder

+0

Personnellement, je ne comprends pas la question. "..que ce n'est pas la même chose à appliquer ..." qu'est-ce que c'est "pareil" ici? Qu'ils peuvent être séquentielle ou sate machine? (Dans ce cas, la réponse est non, je pense.) Je suggère de reformuler la question. –

Répondre

4

Pas tout à fait sûr que je comprends la question mais je vais essayer quand même.

WF n'utilise pas de conteneur IOC. Il utilise le modèle ServiceLocator dans lequel vous ajoutez des dépendances à l'exécution du workflow, au localisateur de service et aux activités de flux de travail et récupérez ces services à partir du runtime du workflow. Un modèle ServiceLocator et IOC sont similaires et ont le même but dans les dépendances de découplage. L'apporach est différent mais dans un conteneur IOC poussant des dépendances alors qu'un ServiceLocator est utilisé pour retirer des dépendances.

Espérons que cela répond à votre question et sinon j'essaierais de reformuler la question originale.

3

J'étais également aux prises avec l'utilisation des composants fournis et entretenus par mon conteneur IOC à partir des flux de production. Comme l'indique l'autre réponse, les instances de workflow veulent utiliser service-locator pour extraire les services du moteur d'exécution au lieu d'injecter les dépendances.

Un moyen facile de combler l'écart consiste à retirer les dépendances de votre conteneur IOC au moment de la configuration de l'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 service pour les extraire de l'environnement d'exécution et les replier dans les propriétés publiques [NonSerialized] sur le workflow. Vous avez ensuite accès aux services à partir des activités de code, etc.

Vous pouvez également configurer un service d'exécution qui injecte des dépendances lorsque les instances de flux de travail sont activées.

Questions connexes