如何从任何类 blazor 服务器端读取 appsetting.json

Kha*_* Ab 3 c# appsettings blazor blazor-server-side

我知道如何从 razor 组件访问 appsetting.json,但如何从 blazor 服务器端项目中的任何类访问?

从剃刀组件我只需注入:

@注入IConfiguration_config

并访问我需要的所有内容,例如:_config.GetConnectionString("default")

但如何在任何班级中做同样的事情呢?当我尝试做的时候

I配置_config;

它说当我想要访问数据时 _config 为空或者是一个未分配的局部变量取决于我写入变量的位置。

Ken*_*suR 11

  • 首先,您应该创建自定义配置模型
    public class PositionOptions
    {
        public const string Position = "Position";

        public string Title { get; set; }
        public string Name { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)
  • 然后,在startup.cs中注册配置模型
services.Configure<PositionOptions>(Configuration.GetSection(PositionOptions.Position));
Run Code Online (Sandbox Code Playgroud)
  • 不要忘记 appsetting.json
 "Position": {
    "Title": "Editor",
    "Name": "Joe Smith"
  }
Run Code Online (Sandbox Code Playgroud)
  • 最后,在index.razor中注入ioptions
@page "/"
@using WebApplication.Model
@using Microsoft.Extensions.Options
@inject IOptions<PositionOptions> _options
<h1>Hello, world!</h1>

Welcome to your new app.

<h1>@_options.Value.Title</h1>
<h1>@_options.Value.Name</h1>

<SurveyPrompt Title="How is Blazor working for you?"/>
Run Code Online (Sandbox Code Playgroud)


小智 7

这只是对 @khalidAb 和 @KenTsu 答案的补充,也许你会发现它很有用。我通常都是这样工作的。就像 KenTsu 提到的,它只是 Options 模式的一个实现,他是为 Blazor 组件做的,这适用于任何类。

应用程序设置.json

"PositionOptions": {
    "Title": "Editor",
    "Name": "Joe Smith"
}
Run Code Online (Sandbox Code Playgroud)

模型

public class PositionOptions
{
    public string Title { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

启动.cs

services.Configure<PositionOptions>(Configuration.GetSection(nameof(PositionOptions)));
Run Code Online (Sandbox Code Playgroud)

任何班级

public class AnyClass {
    private readonly PositionOptions _positionOptions;

    public MyClass(IOptions<PositionOptions> positionOptions)
    {
        _positionOptions = positionOptions.Value;
    }

    public Get()
    {
        string title = _positionOptions.Title;
    }
}
Run Code Online (Sandbox Code Playgroud)