假设我有一个名为 MySiteConfiguration
的类,其中我有一堆,你猜对了,配置数据 . 加载后,该数据在应用程序运行时的过程中不会发生变化 .
我的目标是在启动时构造此类的实例,并从我的控制器操作中访问它 . 我不想多次构建类,因为这不应该是必需的 .
例如,要在WebApi 2中执行此操作,我会:
-
在我的应用程序启动方法中实例化该类 .
-
将实例存储在HttpConfiguration.Properties上
-
创建一个继承自
ApiController
的ControllerBase
类 . -
覆盖
ControllerBase
类中的Initialize(HttpControllerContext)
方法 . 此覆盖将从HttpControllerContext.Configuration.Properties
读取配置实例,并将其分配给ControllerBase
中的属性/字段 .
需要访问配置实例的任何控制器都将继承 ControllerBase
并引用基本属性 . 还不错......
话虽如此,从我所知道的,这种模式在新框架中不起作用 . 在MVC 6的新 Controller
类中没有覆盖初始化方法 . 我也不熟悉新的Startup.cs模式和中间件,可以知道从哪里开始解决这个问题 .
谢谢 .
2 回答
使用依赖注入 . 注册包含数据的单例服务,然后在控制器上使用构造函数注入来获取服务实例 .
首先,定义一个服务 . 服务可以是任何类或接口 .
在你的
Startup.cs
做这样的事情:(请注意,
AddSingleton
还有其他重载,具体取决于您的方案 . )然后在每个控制器中使用它:
如何使用应用程序状态来存储配置数据?
然后,您可以从控制器内部访问配置数据 .