J'essaie d'utiliser Ninject pour injecter un XmlReader. Le problème est qu'il est créé par une méthode d'usine insted d'un constructeur. Et je ne peux pas ajouter un [Inject]
au code dans le .NET Framework. Maintenant, j'utiliser pour créer après la liaison XmlReader:Utiliser la méthode usine dans Ninject que je ne peux pas ajouter d'attribut à
Bind<IXmlReader>()
.ToMethod(
x =>
XmlReader.Create(
(string) GetParameter(x, "inputUri"),
(XmlReaderSettings) GetParameter(x, "settings")))
.Named("definition");
private object GetParameter(IContext context, string name)
{
var parameters = (List<IParameter>) context.Parameters;
return (from p in parameters
where p.Name == name
select p.GetValue(context))
.FirstOrDefault();
}
Et je l'utilise comme suit:
var reader = _kernel.Get<IXmlReader>("definition",
new Parameter("inputUri", FilePath, false),
new Parameter("settings", settings, false)))
Mais ce code est horrible. Puis-je le réécrire de façon plus élégante?
Voir aussi http://stackoverflow.com/questions/10141661/ninject-cascading-constructor-arguments/10142063#10142063 –