【问题标题】:Consume scoped service in Razor Model (Dependency Injection)在 Razor 模型中使用作用域服务(依赖注入)
【发布时间】:2020-03-17 12:12:46
【问题描述】:

我想在 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 外部构造函数中注入范围服务的哪个选项?

【问题讨论】:

  • 注意:中间件中使用作用域服务时,该引用不适用于PageModel,可以并且建议使用构造函数注射

标签: asp.net-core razor dependency-injection


【解决方案1】:

中间件中使用作用域服务时,...

注意:强调我的

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

public class MyPage: PageModel {

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

    //...
}

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

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

参考Introduction to Razor Pages in ASP.NET Core

【讨论】:

    猜你喜欢
    • 2016-07-24
    • 2019-02-23
    • 2018-05-07
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多