Je travaille sur une extension d'infrastructure qui gère l'injection dynamique en utilisant Ninject comme conteneur IoC, mais j'ai du mal à trouver comment y parvenir.Liaison tardive avec Ninject
L'attente de mon cadre est que vous allez passer dans le IModule(s)
il peut facilement être utilisé dans MVC, WebForms, etc. J'ai la classe structuré comme celui-ci:
public class NinjectFactory : IFactory, IDisposable {
readonly IKernel kernel;
public NinjectFactory(IModule[] modules) {
kernel = new StandardKernel(modules);
}
}
C'est très bien , Je peux créer une instance dans un test d'unité et passer une implémentation de base de IModule
(en utilisant la version InlineModule
qui semble être recommandée pour les tests).
Le problème est que ce n'est pas avant l'exécution que je sais que je dois injecter le type (s), et ils sont invités par le cadre que je me étendre, dans une méthode comme ceci:
public IInterface Create(Type neededType) {
}
et voici où je suis perplexe, je ne suis pas sûr de la meilleure façon de Check-> que (le cas échéant) -> retour, j'ai ce jusqu'à présent:
public IInterface Create(Type neededType) {
if(!kernel.Components.Has(neededType)) {
kernel.Components.Connect(neededType, new StandardBindingFactory());
}
}
cela ajoute à la collection de composants, mais je ne peux pas travailler si c'est créé une instance ou comment je crée une instance et passer des arguments pour le .ctor
. Est-ce que je suis sur le bon chemin, ou est-ce que Ninject n'est même pas destiné à être utilisé de cette façon?