Comment les grands C# DI/Cio cadres de comparer?
Au risque d'entrer dans la guerre sainte du territoire, Quelles sont les forces et les faiblesses de ces populaires DI/Cio cadres, et pourrait facilement être considéré comme le meilleur? ..:
- Ninject
- L'unité
- Château.Windsor
- Autofac
- StructureMap
Il d'autres DI/Cio de Cadres pour le C# que je n'ai pas listé ici?
Dans le cadre de mon cas d'utilisation, je suis en train de construire un client d'application WPF et WCF/SQL services d'infrastructure, la facilité d'utilisation (en particulier en termes de syntaxe claire et concise), une documentation cohérente, un bon soutien de la communauté et de la performance sont tous des facteurs importants dans mon choix.
Mise à jour:
Les ressources et de dupliquer les questions citées semblent être hors de date, quelqu'un peut-il à la connaissance de tous ces cadres de venir de l'avant et à fournir un aperçu réel?
Je me rends compte que la plupart des avis sur ce sujet est susceptible d'être biaisée, mais je suis en espérant que quelqu'un a pris le temps d'étudier tous ces cadres et de ont au moins un généralement une comparaison objective.
Je suis tout à fait disposée à faire mes propres enquêtes, si cela n'a pas été fait avant, mais j'ai supposé que c'était quelque chose, au moins un peu de personnes l'avaient déjà fait.
Deuxième Mise À Jour:
Si vous avez de l'expérience avec plus d'un DI/conteneur IoC, veuillez les classer et de les résumer les avantages et les inconvénients de ceux-ci, merci. Ce n'est pas un exercice dans la découverte de toutes les obscurs petits contenants que les gens ont fait, je suis à la recherche pour les comparaisons entre le populaire (et active) les cadres.
- Même question que [Ninject vs Unité de DI ](stackoverflow.com/questions/1054801/ninject-vs-unity-for-di), mais il peut être temps pour un suivi.
- double possible de [la Comparaison Château de Windsor, de l'Unité et de StructureMap ](stackoverflow.com/questions/2216684/...)
- Double Possible. stackoverflow.com/questions/4509458/ioc-comparisions-closed. Il y a aussi un lien qui montre la popularité de la Coi dans la réponse. Avoir un coup d'oeil.
- Je l'ai utilisé sur... 4 projets, les deux premiers étaient vraiment de base, pas de problèmes, la deuxième de deux, l'Unité nous a causé beaucoup de problèmes quand il est venu au constructeur d'injection, de la maintenabilité, de la lisibilité. Nous avons terminé l'extraction de l'Unité des deux et l'a remplacé par StructureMap, constructeur d'injection était mort simple, la configuration était propre et maintenable. Dans mon temps libre, j'ai joué avec AutoFac, mais je trouve ça délicat, ont besoin de la documentation pour mieux le comprendre. Le reste je ne peux que commenter ce que j'ai lu.
- Un problème que nous avions était avec SSRS, il a été silencieusement à défaut et en parcourant le code, nous ne pouvions pas comprendre pourquoi il n'était pas, à l'exception était ambiguë. Nous avons passé une semaine de l'écriture de rechange pour le faire fonctionner. Finalement, quand nous avons déménagé à StructureMap nous avons eu une autre tentative, et dans les minutes à l'aide de 'ObjectFactory.WhatDoIHave()' nous avons appris que le Cio a été construit avant les assemblées ont été chargés dans le domaine d'application, de sorte que les interfaces n'ont jamais été enregistrés avec les types de béton.
- De sorte que, avec le " ObjectFactory.AssertConfigurationIsValid()', fait structuremap plus facile à déboguer. StructureMap permet de multiples façons d'être configuré, avec l'Unité nous l'avons fait dans le code, et nous avons essayé de XML, les deux façons abouti à+ de 60 lignes de XML ou de code de configuration. À l'aide de Registres, d'Attributs et de XML que nous avons réduit la configuration, jusqu'à environ 10 lignes et je n'ai pas touché depuis, il était beaucoup plus facile d'obtenir les autres développeurs qui n'avaient jamais utilisé un conteneur IoC avant, à travers StructureMap. Donc, les multiples façons d'être en mesure de configurer StructureMap est à portée de main.
- Constructeur de l'Injection, je n'ai jamais travaillé de ça... pour les référentiels de nous injecter le NHibernate ISession, j'ai configurer ce type: 'x.Pour<ISession>().HybridHttpOrThreadLocalScoped().Utilisation(réglage d'usine => usine.GetInstance<ISessionFactory>().OpenSession ()); " et c'est ça, chaque référentiel obtient de la même session par demande. Le MVP qui nous a recommandé l'utilisation de l'Unité ne pouvait pas nous dire comment obtenir la même chose. (Je voudrais savoir si ses possible de sorte que quand je suis forcé d'utiliser l'Unité, je peux au moins le faire)
- re. la résolution d'une instance HTTP Contexte ou TLS, l'Unité ne prend pas en charge cette sortie de la boîte (autant que je sache). Vous devez écrire votre propre vie de manager.
- Si vous souhaitez un très complète (plus de 100 pages) comparative de traitement du Château de Windsor, StructureMap, Spring.NET, AutoFac, de l'Unité et de la MEF, vous pouvez acheter mon livre: affiliate.manning.com/idevaffiliate.php?id=1150_236
- Est-il vraiment? DI/Cio est un assez étroit domaine, et peut certainement faire mal ou le bien. Ce n'est pas comme comparer une large technologies comme les IDE ou les Langues. Accordé, tandis que certaines implémentations peuvent atteindre un point où la supériorité est difficile de les distinguer, et elles affichent un niveau d'excellence et d'exhaustivité, il est bien utile de savoir qui elles sont, et si une facette particulière pousse en avant. Ce n'est pas Emacs vs Vim.
Vous devez vous connecter pour publier un commentaire.
Tout une réponse exhaustive à cette question prend des centaines de pages de mon livre, voici un rapide tableau comparatif qui je travaille toujours sur:
PerRequestLifetimeManager
) et aussiMicrosoft.Patterns.Unity.RegistrationByConvention
.Je suis tombé sur une autre performance de la comparaison(dernière mise à jour le 10 avril 2014). Il compare les suivantes:
Voici un rapide résumé du poste:
Vous pouvez également essayer d'utiliser le Service Commun Sélecteur De Bibliothèque et espérons-le, essayez de multiples options et voir ce qui fonctionne le mieux pour vous.
Certains informtion sur les Services Communs du Sélecteur de Bibliothèque à partir du site:
Mise à jour
13.09.2011: Funq et Munq ont été ajoutés à la liste des participants. Les graphiques ont été également mis à jour, et Spring.NET a été retiré en raison de ses mauvaises performances.
04.11.2011: ", a ajouté Simple Injecteur, le rendement est le meilleur de tous les candidats".
Viens de lire ce grand .Net DI conteneur comparaison blog par Philip Mat.
Il fait un peu approfondie de la performance des tests de comparaison, sur;
Il recommande Autofac comme il est petit, rapide, et facile à utiliser ... je suis d'accord. Il semble que L'unité et Ninject sont le plus lent dans ses tests.
Avertissement: dès le début de 2015, il y a une bonne comparaison des Conteneur IoC caractéristiques de Jimmy Bogard, voici un résumé:
Par Rapport Conteneurs:
Le scénario est le suivant: j'ai une interface, IMediator, dans lequel je peux envoyer une seule demande/réponse ou une notification à plusieurs destinataires:
J'ai ensuite créé un ensemble de base de requêtes/réponses/avis:
Je me suis intéressé à la recherche à un certain nombre de choses avec ce qui concerne la prise en charge du conteneur pour les génériques:
INotificationHandlers)
Le programme d'installation pour le générique de la variance (enregistrement des gestionnaires de base de INotification/création de la demande des pipelines)
Mon les gestionnaires sont assez simples, ils ont juste sortie de la console:
Autofac
Ninject
Simple Injecteur
StructureMap
L'unité
Windsor
Effectivement il ya des tonnes de Cio cadres. Il semble que chaque programmeur essaie d'en écrire un à un certain moment de leur carrière. Peut-être de ne pas le publier, mais pour apprendre les rouages.
Personnellement, je préfère autofac car il est assez souple et de syntaxe qui me convient (même si j'ai vraiment hate de tous vous inscrire méthodes sont des méthodes d'extension).
Certains autres cadres:
RegisterControllers()
pour MVC) j'ai donc pensé que la conception autour de cette affaire en valait la peine. (Cela a été conçu de 5 ans.)Bien, après avoir regardé autour, la meilleure comparaison que j'ai trouvé pour l'instant est:
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
C'était un sondage réalisé en Mars 2010.
Un point d'intérêt pour moi, c'est que les gens qui ont utilisé une DI/Cio Cadre et aimé/détesté ça, StructureMap semble prendre le dessus.
Également de ce sondage, il semble que Château.Windsor et StructureMap semblent être les plus fortement favorisée.
Il est intéressant de noter, L'unité et Spring.Net semblent être les options populaires qui sont le plus généralement détesté. (J'envisage de l'Unité de la paresse (et Microsoft insigne/support), mais je vais y regarder de plus près, au Château de Windsor et de StructureMap maintenant.)
Bien sûr, cela sans doute (?) ne s'applique pas à l'Unité 2.0 qui a été publié en Mai 2010.
J'espère que quelqu'un d'autre peut fournir une comparaison basée sur l'expérience directe.
Voir pour une comparaison de net-cio-cadres sur google code y compris linfu et spring.net qui ne sont pas sur votre liste alors que j'écris ce texte.
J'ai travaillé avec spring.net: Il possède de nombreuses fonctionnalités (aop, des bibliothèques , des documents, ...) et il y a beaucoup d'expérience dans le dotnet et la java-monde. Les fonctionnalités sont modulaire de sorte que vous n ' avez pas à prendre toutes les fonctionnalités. Les fonctions sont des abstractions des problèmes communs tels que les databaseabstraction, loggingabstraction. toutefois, il est difficuilt à faire et à déboguer le Cio-configuration.
De ce que j'ai lu jusqu'à présent: Si j'avais à chooseh pour une petite ou une moyenne de projet je voudrais utiliser ninject depuis le cio, la configuration est faite et debuggable en c#. Mais je n'ai pas travaillé avec elle encore. pour les grandes modulaire système que je voudrais rester avec spring.net en raison de l'abstraction-bibliothèques.