Nous utilisons ASP.net MVC.
Lequel de ces derniers est le meilleur framework DI Ninject ou Unity et pourquoi?
Nous utilisons ASP.net MVC.
Lequel de ces derniers est le meilleur framework DI Ninject ou Unity et pourquoi?
Réponses:
La dernière fois que j'ai regardé l'un ou l'autre, j'ai trouvé Ninject légèrement meilleur. Mais les deux ont leurs inconvénients.
Ninject a un meilleur schéma de configuration fluide. Unity semble reposer principalement sur la configuration XML. Le principal inconvénient de Ninject est qu'il vous oblige à référencer Ninject.Core partout dans votre code pour ajouter des attributs [Inject].
Si je peux demander, pourquoi limitez-vous vos choix à ces deux éléments? Je pense que Castle.Windsor, Autofac et StructureMap sont au moins aussi bons ou meilleurs.
Je sais que c'est une vieille question, mais voici mes pensées:
J'aime personnellement Ninject. J'aime les interfaces fluides et éviter le XML. J'aime généralement XML, mais pas pour ce genre de configuration. Surtout lorsque le refactoring est impliqué, les interfaces fluides facilitent la correction.
ObjectFactory de StructureMap me manque, mais il existe des solutions de contournement simples pour l'ajouter à Ninject.
Comme le souligne Jeffery, vous n'avez pas besoin d'utiliser l'attribut [Inject] lorsque vous n'avez qu'un seul constructeur.
J'ai trouvé que je préfère les interfaces fluides non seulement parce qu'elles évitent XML, mais parce qu'elles provoquent des erreurs de compilation lorsque je change quelque chose qui les affecte. La configuration XML ne le fait pas et moins je dois me rappeler de changer, mieux je suis.
Je suis d'accord avec Mendelt, il n'y a pas de «meilleur» cadre de DI. Cela dépend simplement de la situation et ils ont tous des avantages et des inconvénients. pense que David Hayden a déclaré sur DotNet Rocks que Unity est le choix préféré si vous utilisez le reste d'EntLib et que vous êtes familier avec cela. J'utilise personnellement Unity parce que mon client aime le fait qu'il indique Microsoft Enterprise Library (Unity) sur les DLL, si vous obtenez ce que je dis.
J'utilise à la fois la configuration xml pour configurer les interfaces et leurs implémentations concrètes, mais j'utilise ensuite des attributs dans le code lors de l'injection, comme:
<type type="ILogger" mapTo="EntLibLogger">
<lifetime type="singleton"/>
</type>
et en code:
[InjectionConstructor]
public Repository([Dependency] ILogger logger)
Personnellement, je pense que cela rend plus clair ce qui se passe, mais bien sûr, on pourrait dire que vous aurez des références à l'unité partout dans votre candidature. C'est à vous.
http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison
L'unité est plus rapide mais ce n'est pas le meilleur