web-dev-qa-db-fra.com

Comparaison de Castle Windsor, Unity et StructureMap

Dans un suivi de déclaration de Krzysztof que Windsor fait beaucoup plus que les autres IoC, je voulais comprendre comment ces IoC se comparent les uns aux autres et les avantages/installations supplémentaires qui château Windsor fournit.

Y a-t-il des comparaisons? Quelqu'un peut-il m'aider à comprendre les fonctionnalités supplémentaires que Castle Windsor offre par rapport aux autres IoC

52
Quintin Par

Voir ici et ici pour une comparaison technique assez approfondie de plusieurs conteneurs IoC, bien que quelque peu dépassés à l'heure actuelle (ils sont antérieurs à Windsor 2.0)

Cependant, je ne pense pas qu'il y ait vraiment de fonctionnalités vitales que Windsor offre et d'autres conteneurs non. Windsor , StructureMap , Spring.NET existent depuis plusieurs années et ont été utilisés dans de nombreux projets au cours de ces années, ils sont donc très mature maintenant. Les conteneurs plus récents, comme Autofac , nity , Ninject et SimpleInjector s'appuient sur cette expérience précédente pour ne pas manquer ces caractéristiques vitales non plus.

Maintenant, la partie la plus subjective de la réponse: j'aime à penser que Windsor a un bon mélange de modules d'utilisabilité, d'extensibilité et d'intégration.

Facilité d'utilisation : par exemple, vous pouvez utiliser l'enregistrement XML et/ou le code (il a également un API fluide comme la plupart des conteneurs de nos jours ).

Extensibilité : Beaucoup de points d'extension que vous pouvez utiliser pour personnaliser ou remplacer à peu près n'importe quel comportement par défaut.

Intégration : Windsor a beaucoup d'installations (modules) qui permettent une intégration facile avec d'autres frameworks/bibliothèques. Les autres intégrations incluent ASP.NET MVC , MonoRail , Workflow Foundation , NServiceBus , MassTransit =, Rhino Service Bus , Quartz.Net , SolrNet , SolrSharp , Windows Fax Services .

Cette série d'articles couvre de nombreuses subtilités et points d'extension de Windsor.

Notez que je suis pas disant que d'autres conteneurs n'offrent pas des choses similaires! Même si vous en avez choisi un et que vous avez découvert plus tard qu'il manquait une certaine intégration, il n'est généralement pas difficile de le coder vous-même.

Conclusion : Je ne pense pas que vous puissiez vous tromper avec l'un des principaux conteneurs IoC, tant que vous structurez correctement votre code (par exemple, évitez le localisateur de service anti-modèle).

48
Mauricio Scheffer

Pour moi, il y a deux caractéristiques tueuses de Windsor que je ne crois pas que la plupart des autres conteneurs offrent.

  • Capacité à travailler de manière indépendante du conteneur - cela signifie que votre conteneur peut bootstrap tout le code pour vous et vous pouvez profiter pleinement de ses riches capacités sans jamais référencer aucun des assemblages Castle. *. Dll dans vos assemblages hors infrastructure. Cela est dû à des fonctionnalités telles que les chargeurs de composants paresseux, les paramètres dynamiques et les installations d'usine typées, qui ne vous empêchent pas de tirer parti des capacités avancées du conteneur, tout en évitant de coder manuellement la couche d'intégration ou d'utiliser le localisateur de service , qui, comme l'a écrit @ploeh, est un anti motif.

  • écosystème d'extensibilité/d'extensions très riche qui peut vous donner des capacités vraiment puissantes et réduire considérablement la quantité de code de plomberie que vous devez écrire. Cela peut ne pas sembler puissant, mais vous l'apprécierez une fois que vous profiterez de choses comme WCF Facility dans un projet, puis dans un autre, vous ne l'aurez pas pouvoir l'utiliser. La partie extensibilité signifie que bien que Windsor n'essaye pas (c'est son objectif de conception) de résoudre tous les problèmes que vous pourriez avoir hors de la boîte, il est très extensible, ce qui signifie que vous pouvez l'ajuster et le tordre pour faire presque tout ce dont vous pourriez avoir besoin.

En dehors de cela, j'aime juste la façon dont Windsor fonctionne à peu près comme prévu ( contrairement à certains autres conteneurs ) et comment il résout les petites choses . Par exemple, créer des services décorés est très simple. J'aime aussi beaucoup son API d'enregistrement fluide, qui fonctionne très bien pour les deux scénarios simples, et ne devient pas trop tordue et compliquée lorsque vous voulez faire quelque chose de avancé. De plus, beaucoup d'autres petites choses, bien qu'ici les choses puissent être assez subjectives.

17
Krzysztof Kozmic