Je suis relativement nouveau sur Ninject, mais j'ai réussi à l'utiliser pour DI en utilisant un fournisseur personnalisé.Ninject, Providers et Activator.CreateInstance
La liaison est initialisées comme suit
kernel = new StandardKernel();
kernel.Bind<IPatientRecordLocator>().ToProvider<PatientRecordLocatorProvider>();
et le fournisseur personnalisé J'appelle Activator.CreateInstance comme si
protected override IPatientRecordLocator CreateInstance(IContext context)
{
var name = ConfigurationManager.AppSettings["PatientRecordLocator"];
var typeName = name.Split(',')[0];
var assemblyName = name.Split(',')[1];
return Activator.CreateInstance(assemblyName, typeName).Unwrap() as IPatientRecordLocator;
}
(oui, je suis conscient qu'il n'y a pas de traitement d'erreur, etc. dans le code ci-dessus :))
et tout cela fonctionne comme un charme. Maintenant, le problème auquel je suis confronté est lorsque je présente une nouvelle classe que je souhaite injecter dans des instances de IPatientRecordLocator. Le problème se produit lorsque j'ajoute un constructeur comme le suivant par exemple. une de ces classes
[Inject]
public MockPatientRecordLocator (IContactAdapter contactAdapter)
{
...
}
Ensuite, pour Activator.CreateInstance à je travaille ont aussi d'ajouter un constructeur à la classe MockPatientRecordLocator parameterless, à savoir
public MockPatientRecordLocator()
{
}
Alors, ma question est la suivante: comment puis-je faire Ninject injecter une instance d'une classe qui implémente IContactAdapter dans par exemple MockPatientRecordLocator? J'ai essayé l'injection de méthode, mais en vain. J'ai oublié d'expliquer que ce que j'essaye de réaliser est une sorte d'injection chaînée où une instance de la classe PatientRecordSummary est injectée avec une instance de MockPatientRecordLocator (en utilisant l'injection de constructeur) et ladite instance de MockPatientRecordLocator devrait être injectée avec un instance de IContactAdapter (utilisant à nouveau l'injection du constructeur (si possible)). La première partie de la chaîne fonctionne, la seconde ne fonctionne pas.
Salut Ruben, merci pour votre aide (et compliment). Essayer le mieux que je peux :-) Dans cette configuration particulière, je n'ai pas utilisé de modules, mais je vais passer à les utiliser pour que je puisse utiliser plus facilement Bind(). – norgie