Question

Quels frameworks d’injection de dépendances C#/.NET valent la peine d’être examinés ?Et que dire de leur complexité et de leur rapidité.

Était-ce utile?

La solution

modifier (pas de l'auteur) :Il existe une liste complète des frameworks IoC disponibles sur https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc:

  • Château de Windsor - Castle Windsor est le meilleur conteneur d'inversion de contrôle mature de sa catégorie, disponible pour .NET et Silverlight
  • Unité - Conteneur d'injection de dépendances extensible et léger avec prise en charge de l'injection de constructeur, de propriété et d'appel de méthode
  • Fac automatique - Un conteneur .NET IoC addictif
  • SecIoc - Conteneur IoC simple et rapide, doté de toutes les fonctionnalités.
  • Ninject - Le ninja des injecteurs de dépendances .NET
  • StructureCarte - Le conteneur IoC/DI original pour .Net
  • Printemps.Net - Spring.NET est un framework d'application open source qui facilite la création d'applications .NET d'entreprise
  • LumièreInjecter - Un conteneur IoC ultra léger
  • Injecteur simple - Simple Injector est une bibliothèque d'injection de dépendances (DI) facile à utiliser pour .NET 4+ qui prend en charge Silverlight 4+, Windows Phone 8, Windows 8, y compris les applications universelles et Mono.
  • Microsoft.Extensions.DependencyInjection - Le conteneur IoC par défaut pour les applications ASP.NET Core.
  • Scrutateur - Extensions d'analyse d'assemblage pour Microsoft.Extensions.DependencyInjection.
  • VS MEF - Implémentation de Managed Extensibility Framework (MEF) utilisée par Visual Studio.
  • MinusculeIoC - Une inversion de conteneur de contrôle facile à utiliser et sans tracas pour les petits projets, les bibliothèques et les débutants.

La réponse originale suit.


Je suppose que je suis peut-être un peu pointilleux 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 framework IoC (Inversion of Control).Les frameworks IoC rendent la DI beaucoup plus facile et offrent de nombreux 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'avais l'habitude d'utiliser Printemps.Net et ChâteauWindsor beaucoup, mais le vrai problème derrière était toute cette configuration XML embêtante que vous deviez écrire !Ils se déplacent presque tous dans cette direction maintenant, alors j'utilise StructureCarte depuis environ un an, et depuis qu'il est passé à une configuration fluide utilisant des génériques fortement typés et un registre, ma barrière douloureuse lors de l'utilisation d'IoC est tombée en dessous de zéro !Je suis vraiment ravi de savoir 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 à configurer pour moi et la frustration l’emportait souvent.

Mise à jour

j'ai utilisé 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 d'un fantastique ensemble de screencasts Ninject par Justin Etheredge.Je ne vois pas du tout que la mise à niveau de Ninject dans le code existant soit un problème, mais on pourrait en dire autant de StructureCarte dans mon expérience.Ce sera un choix difficile à l’avenir entre ces deux-là, mais je préfère la compétition plutôt que la stagnation et il existe une bonne concurrence saine.

D'autres screencasts IoC peuvent également être trouvés ici sur Dimecasts.

Autres conseils

Cela dépend de ce que vous recherchez, car ils ont chacun leurs avantages et leurs inconvénients.

  1. Spring.NET est le plus mature car il vient de Spring du monde Java.Spring dispose d'un ensemble très riche de bibliothèques de framework qui l'étendent pour prendre en charge le Web, Windows, etc.
  2. Castle Windsor est l'un des plus largement utilisés sur la plate-forme .NET et possède le plus grand écosystème, est hautement configurable/extensible, dispose d'une gestion de durée de vie personnalisée, d'un support AOP, dispose d'un support NHibernate inhérent et constitue un conteneur génial à tous points de vue.Windsor fait partie d'une pile complète qui comprend Monorail, Active Record, etc.NHibernate lui-même s'appuie sur Windsor.
  3. Structure Map a une configuration très riche et fine via un DSL interne.
  4. Autofac est un conteneur IoC du nouvel âge avec tout son support de programmation fonctionnel inhérent.Il adopte également une approche différente des autres en matière de gestion de la vie.Autofac est encore très nouveau, mais il repousse la barre de ce qui est possible avec IoC.
  5. Ninject J'ai entendu dire que c'était plus simple avec une approche moins c'est plus (entendu, pas expérimenté).
  6. Le plus grand discriminateur de Unity est:il provient et est 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 fonctionnalités d'une carte de château ou de structure, par exemple.

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 convient.Ce qui est bien, c'est que vous avez une belle sélection de beignets plutôt que de devoir simplement en prendre un en gelée.

Fac automatique. https://github.com/autofac/Autofac C'est vraiment rapide et plutôt bon.Voici un lien avec des comparaisons (réalisées après que Ninject ait résolu 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 très rapide, mais je n'ai fait aucune comparaison.Je sais que Nate, l'auteur, a fait quelques comparaisons entre Ninject et d'autres frameworks 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 à propos de StructureMap et de CastleWindsor.Ce sont, à mon avis, les trois grands éléments à surveiller en ce moment.

j'utilise Injecteur simple:

Simple Injector est une bibliothèque d'injection de dépendances simple, 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'aime les installations qu'il offre également au-delà de l'histoire d'IoC Container.Cela simplifie vraiment l'utilisation de NHibernate, la journalisation, AOP, etc.J'utilise aussi Binsor pour la configuration avec Boo et je suis vraiment tombé amoureux de Boo en tant que langage à 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 devez utiliser Windsor.

J'ai passé la majeure partie de la journée à lutter sans succès pour faire fonctionner l'exemple Spring.NET le plus simple.Je n'ai jamais compris comment lui faire trouver mon assembly à partir du fichier XML.En 2 heures environ, par contre, j'ai pu faire fonctionner Ninject, y compris tester l'intégration avec NUnit et MSTest.

j'ai utilisé Printemps.NET dans le passé et a connu un grand succès.Je n'ai jamais remarqué de surcharge substantielle, même si le projet sur lequel nous l'avons utilisé était assez lourd en lui-même.Cela n'a pris que peu de temps pour lire le Documentation pour le mettre en place.

L’avantage du C# est qu’il suit un chemin tracé par les développeurs Java qui l’ont précédé pendant des années.Donc, mon conseil, d'une manière générale lorsque vous recherchez des outils de cette nature, est de rechercher la réponse Java solide et de voir s'il existe déjà une adaptation .NET.

Donc, quand il s'agit de DI (et il y a tellement d'options, c'est vraiment une question de goût) c'est Printemps.NET.De plus, il est toujours sage de rechercher les personnes derrière les projets.Je n'ai aucun problème à suggérer les produits SourceGear pour le contrôle de code source (en dehors de leur utilisation) car j'ai du respect pour Eric Sink.J'ai vu Mark Pollack parler et que puis-je dire, le gars comprend tout simplement.

En fin de compte, il existe de nombreux frameworks DI et le mieux est de réaliser quelques exemples de projets avec quelques-uns d'entre eux et de faire un choix éclairé.

Bonne chance!

Je pense qu'un bon point de départ est Ninject, il est nouveau, a pris en compte de nombreux réglages et est très rapide.Nate, le développeur, a vraiment un excellent site et un excellent support.

Spring.Net est assez solide, mais la documentation a mis du temps à être parcourue.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.

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