将ConfigurationManager.AppSettings注入类的好方法

时间:2018-06-22 01:27:35

标签: c# dependency-injection unity-container

我正尝试通过Unity注入ConfigurationManager.AppSettings,以便明智地进行测试,我们可以注入AppSettings的特殊形式的集合。

例如,给定具有接口ClassName的类IClassName,并且ClassName实现使用配置参数,即System.Configuration.ConfigurationManager.AppSettings

public class ClassName : IClassName
{
  public ClassName(System.Collections.Specialized.NameValueCollection AppSettings)
  {
     this._AppSettings = AppSettings;
  }

  public void DoSomething() 
  {
    var urlToCall = _AppSettings["DoSomething.BaseUrl"] + "api/twitter/post";
    //...
  }
}

由于ConfigurationManager.AppSettings不是特定类型,因此从AppSettings实际返回的类型为System.Collections.Specialized.NameValueCollection,这可能太笼统而无法连接到返回ConfigurationManager.AppSettings,这是一个好方法,当注册类型,以仅将参数名称为“ AppSettings”且类型为System.Collections.Specialized.NameValueCollection

时,将分辨率限制为

换句话说,我可以在参数名称为AppSettings的条件下使用RegisterType并输入System.Collections.Specialized.NameValueCollection来返回ConfigurationManager.AppSettings还是走可配置的工厂路线,但这会导致我进入以下内容实现,这是要额外编写的许多代码。啊。 Factory仍将需要具有一个静态变量以一种或另一种方式对其进行调整,并且在测试中使用(web / app)配置可能很难实现。

我宁愿不这样做:创建一个IAppSettings接口,该接口可以提供一个实例,其中一个实现从ConfigurartionManager.AppSettings请求的键返回值,而另一个实现仅从内部从NameValueCollection返回值的实现。在测试期间填充。

0 个答案:

没有答案