Quels cadres d'injection de dépendance C # /. NET méritent d'être étudiés? Et que dire de leur complexité et de leur rapidité.
Quels cadres d'injection de dépendance C # /. NET méritent d'être étudiés? Et que dire de leur complexité et de leur rapidité.
Réponses:
modifier (pas par l'auteur): Il existe une liste complète des cadres IoC disponibles sur https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
La réponse originale suit.
Je suppose que je pourrais être un peu difficile ici, mais il est important de noter que DI (Dependency Injection) est un modèle de programmation et est facilité par, mais ne nécessite pas, un cadre IoC (Inversion of Control). Les frameworks IoC rendent la DI beaucoup plus facile et ils offrent une foule d'autres avantages en plus de la DI.
Cela étant dit, je suis sûr que c'est ce que vous demandiez. À propos des cadres IoC; J'utilisais beaucoup Spring.Net et CastleWindsor , mais la vraie douleur à l'arrière était toute cette configuration XML embêtante que vous deviez écrire! Ils évoluent à peu près tous de cette façon maintenant, donc j'utilise StructureMap depuis environ un an, et depuis qu'il est passé à une configuration fluide en utilisant des génériques fortement typés et un registre, ma barrière de douleur dans l'utilisation d'IoC est tombée à en dessous de zéro! Je reçois un coup de pied absolu en sachant maintenant que ma configuration IoC est vérifiée au moment de la compilation (pour la plupart) et je n'ai eu que de la joie avec StructureMap et sa vitesse. Je ne dirai pas que les autres étaient lents à l'exécution, mais ils étaient plus difficiles à installer et la frustration l'emportait souvent.
Mise à jour
J'utilise Ninject sur mon dernier projet et ce fut un plaisir absolu à utiliser. Les mots me manquent un peu ici, mais (comme on dit au Royaume-Uni) ce cadre est «les chiens». Je le recommande vivement pour tous les projets de champs verts où vous souhaitez être opérationnel rapidement. J'ai obtenu tout ce dont j'avais besoin grâce à un fantastique ensemble de screencasts Ninject de Justin Etheredge. Je ne vois pas du tout que l'ajustement de Ninject dans le code existant soit un problème, mais on pourrait dire la même chose de StructureMap dans mon expérience. Ce sera un choix difficile à l'avenir entre ces deux-là, mais je préfère la compétition à la stagnation et il y a une bonne quantité de concurrence saine là-bas.
D'autres screencasts IoC peuvent également être trouvés ici sur Dimecasts .
Cela dépend de ce que vous recherchez, car chacun a ses avantages et ses inconvénients.
Spring.NET
est le plus mature car il sort du printemps du monde Java. Spring dispose d'un ensemble très riche de bibliothèques de frameworks qui l'étendent pour prendre en charge le Web, Windows, etc.Castle Windsor
est l'un des plus largement utilisés dans la plate-forme .NET et possède le plus grand écosystème, est hautement configurable / extensible, a une gestion de la vie personnalisée, un support AOP, a un support NHibernate inhérent et est un conteneur génial. Windsor fait partie d'une pile complète qui comprend Monorail, Active Record, etc. NHibernate se construit au-dessus de Windsor.Structure Map
a une configuration très riche et à grain fin via une DSL interne.Autofac
est un conteneur IoC de la nouvelle ère avec tout son support de programmation fonctionnelle inhérent. Il gère également une approche de la gestion de la vie différente des autres. Autofac est encore très nouveau, mais il pousse la barre sur ce qui est possible avec IoC.Ninject
J'ai entendu dire que les os sont plus nus avec une approche moins est plus (entendu sans expérience).Unity
est: il est de et pris en charge par Microsoft (p & p). Unity a de très bonnes performances et une excellente documentation. Il est également hautement configurable. Il n'a pas toutes les cloches et les sifflets de la carte du château / structure.Donc, en résumé, cela dépend vraiment de ce qui est important pour vous. Je serais d'accord avec les autres pour aller évaluer et voir lequel correspond. La bonne chose est que vous avez une belle sélection de beignets plutôt que de simplement en avoir une gelée.
Autofac. https://github.com/autofac/Autofac C'est vraiment rapide et assez bon. Voici un lien avec des comparaisons (faites après que Ninject a corrigé un problème de fuite de mémoire).
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ninject est génial. Cela semble vraiment rapide, mais je n'ai fait aucune comparaison. Je sais que Nate, l'auteur, a fait des comparaisons entre Ninject et d'autres cadres DI et cherche d'autres moyens d'améliorer la vitesse de Ninject.
J'ai entendu beaucoup de gens que je respecte dire de bonnes choses sur StructureMap et CastleWindsor. Ce sont, à mon avis, les trois grands à considérer en ce moment.
J'utilise Simple Injector :
Simple Injector est une bibliothèque d'injection de dépendances facile, flexible et rapide qui utilise les meilleures pratiques pour guider vos solutions vers le gouffre du succès.
Je suis un grand fan de Castle. J'adore les installations qu'il propose également au-delà de l'histoire des conteneurs IoC. Cela simplifie vraiment l'utilisation de NHibernate, la journalisation, AOP, etc. J'utilise également Binsor pour la configuration avec Boo et je suis vraiment tombé amoureux de Boo comme langue à cause de cela.
Je peux recommander Ninject. C'est incroyablement rapide et facile à utiliser, mais seulement si vous n'avez pas besoin de configuration XML, sinon vous devriez utiliser Windsor.
J'ai passé la meilleure partie d'une journée à lutter sans succès pour faire fonctionner l'exemple Spring.NET le plus simple. Je n'ai jamais pu trouver comment l'obtenir pour trouver mon assembly à partir du fichier XML. En environ 2 heures, d'un autre côté, j'ai pu faire fonctionner Ninject, y compris le test d'intégration avec NUnit et MSTest.
J'ai utilisé Spring.NET dans le passé et j'ai eu beaucoup de succès avec. Je n'ai jamais remarqué de frais généraux substantiels, bien que le projet sur lequel nous l'avons utilisé était assez lourd en soi. Il n'a fallu qu'un peu de temps pour lire la documentation pour la configurer.
La grande chose à propos de C # est qu'il suit un chemin battu par des années de développeurs Java avant lui. Donc, mon conseil, d'une manière générale lors de la recherche d'outils de cette nature, est de chercher la bonne réponse Java et de voir s'il existe encore une adaptation .NET.
Donc, quand il s'agit de DI (et il y a tellement d'options là-bas, c'est vraiment une question de goût) est Spring.NET . De plus, il est toujours sage de rechercher les personnes derrière les projets. Je n'ai aucun problème à suggérer des produits SourceGear pour le contrôle des sources (en dehors de les utiliser) parce que j'ai du respect pour Eric Sink. J'ai vu Mark Pollack parler et que puis-je dire, le gars comprend.
En fin de compte, il existe de nombreux cadres DI et votre meilleur pari est de faire quelques exemples de projets avec quelques-uns d'entre eux et de faire un choix éclairé.
Bonne chance!
Je pense qu'un bon endroit pour commencer est avec Ninject, il est nouveau et a pris en compte beaucoup de réglages fins et est vraiment rapide. Nate, le développeur, a vraiment un excellent site et un excellent support.
Spring.Net est assez solide, mais la documentation a pris un certain temps à parcourir. Autofac est bon, et bien que .Net 2.0 soit pris en charge, vous avez besoin de VS 2008 pour le compiler, ou bien utilisez la ligne de commande pour créer votre application.