0

使用 lightinject 时,有没有办法使用外部配置文件中的字符串值来告诉容器注册文件中提到的服务?这将在 xml 文件或 web.config 文件中。

例如,在我的 web.config 中的前一个项目中,我将有以下行

 <add key="PersonRepository.Interface.IPersonRepository" value="PersonRepository.Db.DbRepository,
     PersonRepository.Db, Version=1.0.0.0, Culture=neutral"/>

我可以通过 WebConfigurationManager 调用获得值。此示例将具体类 PersonRepository.Db.DbRepository 名称作为字符串获取,然后可用于解析依赖关系。这是我过去使用过的一种方法,但无法弄清楚如何使用 lightinject 做同样的事情。这可能吗?

抱歉,如果这有点混乱,这是我第一次正确尝试依赖注入。

非常感谢。


再一次问好。我已经尝试了几天来实现您描述的方法,但没有成功。简明扼要地证明这一点;

 var myString = "hello";
 Type stringType = Type.GetType(myString);
 container.Register<ICloneable, stringType>();

我从编译器得到错误'stringType'是一个变量,但它像一个类型一样使用。

在此处进一步阅读;

如何使用 typeof 或 GetType() 作为 Generic 的模板?

似乎这是对语言的限制。请问有什么想法吗?非常感谢。

4

1 回答 1

1

LightInject 不直接使用 XML 文件,但您应该能够通过配置管理器获取两种类型,服务类型和实现类型。然后,您需要使用 Type.GetType(typeName) 之类的方法解析类型,然后将服务注册到容器中。

话虽如此,我强烈建议您将容器的配置从配置文件移动到代码(组合根)中。服务类型和实现类型之间的映射在编译后很少更改,您可以从强类型配置中受益。

于 2016-10-04T08:03:09.720 回答