Au risque de pénétrer sur le territoire de la guerre sainte, quelles sont les forces et les faiblesses de ces cadres DI / IoC populaires, et pourrait-on facilement considérer comme le meilleur? ..:
- Ninject
- Unité
- Castle.Windsor
- Autofac
- StructureMap
Existe-t-il d'autres cadres DI / IoC pour C # que je n'ai pas répertoriés ici?
Dans le cadre de mon cas d'utilisation, je crée une application WPF cliente et une infrastructure de services WCF / SQL, la facilité d'utilisation (en particulier en termes de syntaxe claire et concise), une documentation cohérente, un bon support communautaire et des performances sont tous des facteurs importants dans mon choix.
Mettre à jour:
Les ressources et les questions en double citées semblent être obsolètes, une personne connaissant tous ces cadres peut-elle se présenter et fournir de véritables informations?
Je me rends compte que la plupart des opinions sur ce sujet sont susceptibles d'être biaisées, mais j'espère que quelqu'un a pris le temps d'étudier tous ces cadres et d'avoir au moins une comparaison généralement objective.
Je suis tout à fait disposé à faire mes propres enquêtes si cela n'a pas été fait auparavant, mais j'ai supposé que c'était quelque chose qu'au moins quelques personnes avaient déjà fait.
Deuxième mise à jour:
Si vous avez de l'expérience avec plus d'un conteneur DI / IoC, veuillez classer et résumer les avantages et les inconvénients de ceux-ci, merci. Ce n'est pas un exercice pour découvrir tous les petits conteneurs obscurs que les gens ont faits, je cherche des comparaisons entre les frameworks populaires (et actifs).
Réponses:
Alors qu'une réponse complète à cette question occupe des centaines de pages de mon livre , voici un tableau de comparaison rapide sur lequel je travaille toujours:
la source
Je suis tombé sur une autre comparaison de performances (dernière mise à jour 10 avril 2014). Il compare les éléments suivants:
Voici un bref résumé de l'article:
Vous pouvez également essayer d'utiliser la bibliothèque du sélecteur de services communs et, espérons-le, essayer plusieurs options et voir ce qui vous convient le mieux.
Quelques informations sur la bibliothèque Common Service Selector du site:
Mettre à jour
13.09.2011: Funq et Munq ont été ajoutés à la liste des candidats. Les graphiques ont également été mis à jour et Spring.NET a été supprimé en raison de ses performances médiocres.
04.11.2011: "a ajouté Simple Injector , la performance est la meilleure de tous les concurrents".
la source
Il suffit de lire ce superbe blog de comparaison de conteneurs DI .Net de Philip Mat.
Il fait des tests de comparaison de performances approfondis sur;
Il recommande Autofac car il est petit, rapide et facile à utiliser ... Je suis d'accord. Il semble que Unity et Ninject soient les plus lents dans ses tests.
la source
Avertissement: Au début de 2015, il y a une grande comparaison des IoC Container dispose de Jimmy Bogard , voici un résumé:
Conteneurs comparés:
Le scénario est le suivant: j'ai une interface, IMediator, dans laquelle je peux envoyer une seule demande / réponse ou une notification à plusieurs destinataires:
J'ai ensuite créé un ensemble de base de demandes / réponses / notifications:
Je souhaitais examiner quelques éléments concernant la prise en charge des conteneurs pour les génériques:
Configuration de la variance générique (enregistrement des gestionnaires pour la base INotification / création de pipelines de demande) Mes gestionnaires sont assez simples, ils sortent simplement sur la console:
Autofac
Ninject
Injecteur simple
StructureMap
Unité
Windsor
la source
En fait, il existe des tonnes de cadres IoC. Il semble que chaque programmeur essaie d'en écrire un à un moment donné de sa carrière. Peut-être pas pour le publier, mais pour apprendre le fonctionnement interne.
Personnellement, je préfère autofac car il est assez flexible et a une syntaxe qui me convient (même si je déteste vraiment que toutes les méthodes de registre soient des méthodes d'extension).
Quelques autres cadres:
la source
RegisterControllers()
pour MVC), donc j'ai pensé que la conception autour de ce cas en valait la peine. (Ceci a été conçu il y a 5+ ans.)Eh bien, après avoir regardé la meilleure comparaison que j'ai trouvée jusqu'à présent, voici:
http://www.sturmnet.org/blog/2010/03/04/poll-ioc-containers-for-net
http://www.sturmnet.org/blog/2010/03/04/poll-results-ioc-containers-for-net
Il s'agissait d'un sondage réalisé en mars 2010.
Un point d'intérêt pour moi est que les personnes qui ont utilisé un framework DI / IoC et l'ont aimé / détesté, StructureMap semblent sortir en tête.
Toujours d'après le sondage, il semble que Castle.Windsor et StructureMap semblent être les plus favorisés.
Fait intéressant, Unity et Spring.Net semblent être les options les plus populaires qui sont le plus généralement détestées. (Je considérais Unity par paresse (et le badge / support Microsoft), mais je vais maintenant regarder de plus près Castle Windsor et StructureMap.)
Bien sûr, cela (?) Ne s'applique probablement pas à Unity 2.0 qui a été publié en mai 2010.
J'espère que quelqu'un d'autre pourra fournir une comparaison basée sur l'expérience directe.
la source
Voir pour une comparaison des frameworks net-ioc sur google code y compris linfu et spring.net qui ne sont pas sur votre liste pendant que j'écris ce texte.
J'ai travaillé avec spring.net: il a de nombreuses fonctionnalités (aop, bibliothèques, docu, ...) et il y a beaucoup d'expérience avec lui dans le dotnet et le monde java. Les fonctionnalités sont modulaires afin que vous n'ayez pas à prendre toutes les fonctionnalités. Les fonctionnalités sont des abstractions de problèmes courants comme l'abstraction de la base de données, l'abstraction de la journalisation. cependant, il est difficile de faire et de déboguer la configuration IoC.
D'après ce que j'ai lu jusqu'à présent: si je devais choisir h pour un petit ou moyen projet, j'utiliserais ninject car la configuration ioc est terminée et débogable en c #. Mais je n'ai pas encore travaillé avec. pour les grands systèmes modulaires, je resterais avec spring.net à cause des bibliothèques d'abstraction.
la source