Chargement de modules dans tous les assemblages de Ninject
J'ai quelques bibliothèques de classe dans mon projet, et tous sont à l'aide de Ninject
conteneur IoC. J'ai voulu charger tous les modules dans un StandardKernel
à un aller partout où un INinjectModule
est trouvé. J'ai donc utilisé:
var kernel = new StandardKernel();
kernel.Load(AppDomain.CurrentDomain.GetAssemblies())
Mais cela ne fonctionne pas pour une raison quelconque. Quelqu'un peut-il aider?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Bien, ce qui arrive souvent lorsque les liaisons sont déclarées mais d'autres modules sont chargés, où ce module tente de résoudre une liaison qui n'a pas encore chargé. Cela se produit parce que
List<INinjectModule>
ne peut pas dans le bon ordre.Si vous pensez que c'est le cas. Suivre cette résolution.
L'idée est que nous avons un
bootstapper
pour chaque assemblée, où le programme d'amorçage sera responsable de charger les modules dans son ordre logique.Considérons une interface de programme d'amorçage (ce que nous allons utiliser pour trouver le programme d'amorçage dans une assemblée)
Maintenant prendre en compte pour votre DataAccess de l'assemblée, de mettre en œuvre la
INinjectModuleBootstrapper
:C'est la façon dont vous defne la
Bootstrapper
pour toute votre assemblée. Maintenant, à partir de votre démarrage du programme, nous avons besoin de laStandardKernel
où tous les modules sont chargés. Nous allons écrire quelque chose comme ceci:Et notre
BootstrapperHelper
classe est:Une autre chose que vous devez vérifier est de savoir si la classe qui étend la classe NinjectModule est public, sinon il ne sera pas visible dans l'Assemblée.
Je pense que c'est pas une bonne idée d'utiliser CurrentDomain.GetAllAssemblies() parce que tous les assemblys de projet peut être chargé au démarrage du programme ( certains assemblages peuvent être chargés sur les actions de l'utilisateur, par exemple, ou d'autres événements). Dans ce cas, vous devrez null-les exceptions de référence pour les dépendances.
Vous pouvez utiliser la réflexion pour trouver et instancier les Ninject modules: