加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core-mvc – 如何在启动时初始化应用程序状态并从MVC 6

发布时间:2020-12-16 09:41:04 所属栏目:asp.Net 来源:网络整理
导读:假设我有一个名为MySiteConfiguration的类,其中我有一堆,你猜对了,配置数据.加载后,该数据在应用程序运行时的过程中不会发生变化. 我的目标是在启动时构造此类的实例,并从我的控制器操作中访问它.我不想多次构建类,因为这不应该是必需的. 例如,要在WebApi 2
假设我有一个名为MySiteConfiguration的类,其中我有一堆,你猜对了,配置数据.加载后,该数据在应用程序运行时的过程中不会发生变化.

我的目标是在启动时构造此类的实例,并从我的控制器操作中访问它.我不想多次构建类,因为这不应该是必需的.

例如,要在WebApi 2中执行此操作,我会:

>在我的应用程序启动方法中实例化该类.
>将实例存储在HttpConfiguration.Properties上
>创建一个继承自ApiController的ControllerBase类.
>覆盖ControllerBase类中的Initialize(HttpControllerContext)方法.此覆盖将从HttpControllerContext.Configuration.Properties读取配置实例,并将其分配给ControllerBase中的属性/字段.

需要访问配置实例的任何控制器都将继承ControllerBase并引用基本属性.还不错……

话虽如此,从我所知道的,这种模式在新框架中不起作用.在MVC 6的新Controller类上没有覆盖初始化方法.我也不熟悉新的Startup.cs模式和中间件,可以知道从哪里开始解决这个问题.

谢谢.

解决方法

使用依赖注入.注册包含数据的单例服务,然后在控制器上使用构造函数注入来获取服务实例.

首先,定义一个服务.服务可以是任何类或接口.

public class MyConfigService {
    // declare some properties/methods/whatever on here
}

在你的Startup.cs做这样的事情:

services.AddSingleton<MyConfigService>();

(请注意,AddSingleton还有其他重载,具体取决于您的方案.)

然后在每个控制器中使用它:

public MyController : Controller {
    public MyController(MyConfigService myService) {
        // do something with the service (read some data from it,store it in a private field/property,etc.
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读