Global Variables in ASP.NET MVC 4
我目前正在构建一个ASP.NET MVC 4 SaaS应用程序(C),并且一直在设计计划。我的意思是,如果客户选择
我一直坚持的是将客户计划与所有行动分享的最佳实践。我意识到拥有全局变量是不好的做法,但我真的不想去数据库来回访问,以得到每个行动的计划。
我想做的是这样的事情,所以回答他们只是声明一个静态模型,并在某个点设置它,然后在稍后访问它。在你看来,这是最好的方法吗?有更好的方法吗?
我认为最好的做法是在项目中包含一个IOC,并向控制器注入一个配置对象。
控制器示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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
1 2 3 4 | public interface IConfigService { string ConfiguredPlan{ get; } } |
您的配置服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public class ConfigService : IConfigService { private string _ConfiguredPlan = null; public string ConfiguredPlan { get { if (_ConfiguredPlan == null){ //load configured plan from DB } return _ConfiguredPlan; } } } |
- 这个类很容易扩展为包含更多的配置,比如连接字符串、默认超时等等。
- 我们将一个接口传递给我们的控制器类,在单元测试期间我们很容易模拟这个对象。