我认为最好的做法是你应该在你的项目中包含一个 IoC 并向你的控制器注入一个配置对象。
控制器示例代码:
public class YourController : Controller
{
private IConfigService _configService;
//inject your configuration object here.
public YourController(IConfigService configService){
// A guard clause to ensure we have a config object or there is something wrong
if (configService == null){
throw new ArgumentNullException("configService");
}
_configService = configService;
}
}
您可以配置您的 IoC 以为此配置对象指定单例范围。如果您需要将此模式应用于所有控制器,您可以创建一个基本控制器类来重用代码。
你的 IConfigService
public interface IConfigService
{
string ConfiguredPlan{ get; }
}
您的配置服务:
public class ConfigService : IConfigService
{
private string _ConfiguredPlan = null;
public string ConfiguredPlan
{
get
{
if (_ConfiguredPlan == null){
//load configured plan from DB
}
return _ConfiguredPlan;
}
}
}
- 此类很容易扩展以包含更多配置,例如连接字符串,默认超时,...
- 我们将一个接口传递给我们的控制器类,在单元测试期间我们很容易模拟这个对象。