Я пытаюсь использовать Ninject для ввода XmlReader. Проблема заключается в том, что он создается с помощью заводского метода, созданного конструктором. И я не могу добавить [Inject]
в код в .NET Framework. Теперь я использую следующие привязки для создания XmlReader:Использовать фабричный метод в Ninject, который я не могу добавить атрибут к
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();
}
И я использую его следующим образом:
var reader = _kernel.Get<IXmlReader>("definition",
new Parameter("inputUri", FilePath, false),
new Parameter("settings", settings, false)))
Но этот код ужасен. Могу ли я переписать его каким-нибудь красивым способом?
См. Также http://stackoverflow.com/questions/10141661/ninject-cascading-constructor-arguments/10142063#10142063 –