我目前正在构建一个ASP.Net MVC 4 SAAS应用程序(C#),并且一直在设计计划。我的意思是,如果客户选择Plan A
,他们应该可以访问一些东西,如果他们选择Plan B
,他们可以访问其他东西,等等
我坚持的部分是与所有行动共享帐户计划的最佳实践。我意识到拥有全局变量是一种糟糕的做法,但我真的不想往返于DB来获得每一项行动的计划。
我想做的是这样的回答,他们只是声明一个静态模型,并在某个时候设置它,然后访问它。在你看来,这是最好的方法吗?有更好的方法吗?
我认为最好的做法是在项目中包含一个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;
}
}
}
- 这个类可以很容易地扩展到包括更多的配置,如连接字符串、默认超时
- 我们将一个接口传递给我们的控制器类,在单元测试期间模拟这个对象很容易