首页 > 解决方案 > 在 Razor 模型中使用作用域服务(依赖注入)

问题描述

我想在 Razor PageModel 中使用范围服务。注册是这样的:

services.AddScoped<IOperationScoped, Operation>();

但微软表示不要在作用域服务上使用构造函数注入:

在中间件中使用范围服务时,将服务注入 Invoke 或 InvokeAsync 方法。不要通过构造函数注入进行注入,因为它会强制服务表现得像一个单例。

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.1#service-lifetimes

但是我必须在构造函数之外的 Razor 中注入范围服务的哪个选项?

标签: asp.net-corerazordependency-injection

解决方案


中间件中使用范围服务时,...

注意: 强调我的

该引用专门指中间件,不适用于PageModel可以并建议使用构造函数注入的 .

public class MyPage: PageModel {

    //ctr
    public MyPage(IOperationScoped operation) {
        //...
    }

    //...
}

PageModel 类允许将页面的逻辑与其表示分离。它为发送到页面的请求和用于呈现页面的数据定义页面处理程序。这种分离允许:

  • 通过依赖注入管理页面依赖。
  • 单元测试

参考ASP.NET Core 中 Razor 页面简介


推荐阅读