通过 xml 文件或 web.config 使用 lightinject 解决依赖关系
Resolve dependency through xml file or web.config using lightinject
使用 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 调用获取值。此示例获取具体的 class PersonRepository.Db.DbRepository 名称作为字符串,然后可用于解析依赖项。这是我过去使用过的一种方法,但无法弄清楚如何用 lightinject 做同样的事情。这可能吗?
抱歉,如果这有点混乱,这是我第一次真正涉足依赖注入。
非常感谢。
你好。我已经尝试了几天来按照您描述的方式实施该方法,但没有奏效。为了简洁地证明这一点;
var myString = "hello";
Type stringType = Type.GetType(myString);
container.Register<ICloneable, stringType>();
我从编译器中得到错误 'stringType' 是一个变量,但像类型一样使用。
进一步阅读此处;
How to use typeof or GetType() as Generic's Template?
看来这是语言的限制。请问有什么想法吗?非常感谢。
LightInject 不直接与 XML 文件一起使用,但您应该能够通过配置管理器获取这两种类型、服务类型和实现类型。然后,您需要使用 Type.GetType(typeName) 之类的方法解析类型,然后向容器注册服务。
也就是说,我强烈建议您将容器的配置从配置文件移动到代码(组合根)中。服务和实现类型之间的映射在编译后很少改变,您将受益于强类型配置。
使用 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 调用获取值。此示例获取具体的 class PersonRepository.Db.DbRepository 名称作为字符串,然后可用于解析依赖项。这是我过去使用过的一种方法,但无法弄清楚如何用 lightinject 做同样的事情。这可能吗?
抱歉,如果这有点混乱,这是我第一次真正涉足依赖注入。
非常感谢。
你好。我已经尝试了几天来按照您描述的方式实施该方法,但没有奏效。为了简洁地证明这一点;
var myString = "hello";
Type stringType = Type.GetType(myString);
container.Register<ICloneable, stringType>();
我从编译器中得到错误 'stringType' 是一个变量,但像类型一样使用。
进一步阅读此处;
How to use typeof or GetType() as Generic's Template?
看来这是语言的限制。请问有什么想法吗?非常感谢。
LightInject 不直接与 XML 文件一起使用,但您应该能够通过配置管理器获取这两种类型、服务类型和实现类型。然后,您需要使用 Type.GetType(typeName) 之类的方法解析类型,然后向容器注册服务。
也就是说,我强烈建议您将容器的配置从配置文件移动到代码(组合根)中。服务和实现类型之间的映射在编译后很少改变,您将受益于强类型配置。