使用lightinject时,是否有任何方法使用外部配置文件中的字符串值来告诉容器注册文件中提到的服务?这可能是在xml文件或web中。配置文件。
例如,在我的网页上的一个以前的项目。我将有以下行
<add key="PersonRepository.Interface.IPersonRepository" value="PersonRepository.Db.DbRepository,
PersonRepository.Db, Version=1.0.0.0, Culture=neutral"/>
我可以通过WebConfigurationManager调用获得该值。这个例子以字符串的形式获取具体的类PersonRepository.Db.DbRepository名称,然后可以使用它来解析依赖项。这是我过去用过的一种方法,但不知道如何用光照来做同样的事情。这可能吗?
很抱歉,如果这有点混乱,这是我第一次适当地尝试依赖注入。
多谢。
你好了。我已经尝试了几天来实现你所描述的方法,它没有工作。为了简洁地演示这一点;
var myString = "hello";
Type stringType = Type.GetType(myString);
container.Register<ICloneable, stringType>();
我得到编译器的错误'stringType'是一个变量,但像类型一样使用。
在这里进一步阅读;
如何使用typeof或GetType()作为泛型模板?
似乎这是对语言的限制。有什么想法吗?多谢。
LightInject不能直接处理XML文件,但是您应该能够通过配置管理器获得这两种类型,服务类型和实现类型。然后,您需要使用Type.GetType(typeName)之类的东西来解析类型,然后向容器注册服务。
话虽如此,我强烈建议您将容器的配置从配置文件移到代码中(组合根)。服务和实现类型之间的映射在编译后很少改变,您可以从强类型配置中获益。