【问题标题】:Resolve dependency through xml file or web.config using lightinject使用 lightinject 通过 xml 文件或 web.config 解决依赖关系
【发布时间】:2016-10-03 13:34:32
【问题描述】:

当使用 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'是一个变量,但它被用作一个类型。

在此处进一步阅读;

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 你好。我已经尝试了几天来实现您描述的方法,但它没有奏效。简明扼要地证明这一点; var myString = "你好";类型 stringType = Type.GetType(myString); container.Register();我从编译器得到错误'stringType'是一个变量,但它像一个类型一样使用。在此处进一步阅读; stackoverflow.com/questions/302577/… 似乎这是语言的限制。请问有什么想法吗?非常感谢
    • 我们为什么不在 GitHub 上继续这个?在 LightInject 存储库中创建一个问题。然后使用您正在尝试做的示例创建另一个 repo,我们将 PR 到该 repo
    • 这里有一个指向that PR 的链接,因为如果没有它,这个回复看起来毫无帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2012-12-02
    • 2019-08-20
    • 1970-01-01
    相关资源
    最近更新 更多