使用lightinject通过xml文件或web.config解析依赖关系

时间:2016-10-03 13:34:32

标签: c# asp.net asp.net-mvc inversion-of-control light-inject

使用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>();

我从编译器中得到错误&#39; stringType&#39;是一个变量,但是像一个类型一样使用。

在此进一步阅读;

How to use typeof or GetType() as Generic's Template?

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

1 个答案:

答案 0 :(得分:1)

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

话虽如此,我强烈建议您将容器的配置从配置文件移动到代码(Composition根目录)。服务和实现类型之间的映射在编译后很少改变,您可以获得强类型配置的好处。