我宁愿注射
IAppSettings
到每个需要它的类中,只是为了让它们远离对
Settings
. 问题是,您真的需要将这种依赖性撒到每个类中吗?
如果你真的想用静电
设置
我至少会尝试让它测试友好/可伪造。考虑一下:
public static class Settings
{
public static Func<IAppSettings> AppSettings { get; set; }
}
在你建造容器的地方:
var builder = new ContainerBuilder();
...
var container = builder.Build();
Settings.AppSettings = () => container.Resolve<IAppSettings>();
这将允许在测试期间与假货交换:
Settings.AppSettings = () => new Mock<IAppSettings>().Object;
现在
AppSettings
类(我假设只有一个)可以用常规的构造函数注入来完成。我还假设您真的希望对每次调用设置属性进行解析,从而在需要时插入一个工厂委托来检索实例。如果不需要的话,你当然应该注射
IConfigurationSettings
直接服务。
public class AppSettings : IAppSettings
{
private readonly Func<IConfigurationSettings> _configurationSettings;
public AppSettings(Func<IConfigurationSettings> configurationSettings)
{
_configurationSettings = configurationSettings;
}
public string Setting1
{
get
{
return _configurationSettings().AppSettings["setting1"];
}
}
public string Setting2
{
get
{
return _configurationSettings().AppSettings["setting2"];
}
}
}