我尝试使用 Ninject 来注入 XmlReader。问题是它是由构造函数的工厂方法创建的。而且我无法[Inject]
在 .NET Framework 中添加代码。现在我使用以下绑定来创建 XmlReader:
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)))
但是这段代码太可怕了。我可以用更漂亮更聪明的方式重写它吗?