简体   繁体   English

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

[英]How to read appsetting.json from any class blazor serverside

i know how to acess to appsetting.json fron razor component but how from any class in a blazor serverside project?我知道如何从 razor 组件访问 appsetting.json 但如何从 blazor 服务器端项目中的任何 class 访问?

from razor component i simply inject:从 razor 组件我简单地注入:

@inject IConfiguration _config @inject IConfiguration _config

and access all that i need like: _config.GetConnectionString("default")并访问我需要的所有内容:_config.GetConnectionString("default")

but how can do the same from any class?但是如何从任何 class 做同样的事情呢? when i try to do当我尝试做

IConfiguration _config; I配置_配置;

it says when i want to reach data that _config is null or is an unassigned local variable depands where i write the variable.它说当我想访问数据时 _config 是 null 或者是一个未分配的局部变量取决于我在哪里写变量。

  • first, you should create custom config model首先,您应该创建自定义配置 model
    public class PositionOptions
    {
        public const string Position = "Position";

        public string Title { get; set; }
        public string Name { get; set; }
    }
  • then, register config model in startup.cs然后,在 startup.cs 中注册配置 model
services.Configure<PositionOptions>(Configuration.GetSection(PositionOptions.Position));
  • don not forget appsetting.json不要忘记appsetting.json
 "Position": {
    "Title": "Editor",
    "Name": "Joe Smith"
  }
  • at last, inject ioptions in the index.razor最后,在 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?"/>

I get the connection string details from appsettings.json in a class file.我从 class 文件中的 appsettings.json 获取连接字符串详细信息。 Please try this below code:请尝试以下代码:

Test.cs测试.cs

public void GetAddSettingDetails(){
            var appsettingsJsonString = File.ReadAllText("appsettings.json");
            var appsettingsJObject = JObject.Parse(appsettingsJsonString);
            var connectionstring = appsettingsJObject.SelectToken("DefaultConnection").Value<string>();
}

appsettings.json appsettings.json

{
  "AllowedHosts": "*",
  "DefaultConnection": "Data Source=*****;Initial Catalog=Test;User Id=aabbcc;Password=aabbccdd;",
  "ApplicationVersion": "1.0.0",
}

i understood how it work so i can answer my question myself我了解它是如何工作的,所以我可以自己回答我的问题

in fact, you just have to add a constructor in your class with Iconfiguration as argumentand you can use it and call your data stored in your app setteing:实际上,您只需在 class 中添加一个构造函数,并使用 Iconfiguration 作为参数,您就可以使用它并调用存储在应用程序设置中的数据:

    public class MyClass 
{
    public MyClass (IConfiguration config)
    {
        _config = config;
    }


    private readonly IConfiguration _config;
    


    void MyMethod(){
            .....
           }
}

You can use it after in your method:您可以在您的方法中使用它:

string myCon = _config.GetConnectionString("Default");

This is just a complement to @khalidAb and @KenTsu answers perhaps you find it useful.这只是对@khalidAb 和@KenTsu 答案的补充,也许您会觉得它很有用。 I usually work this way.我通常以这种方式工作。 Like KenTsu mentioned, it is just an implementation of Options pattern, he did it for a Blazor component, this is just for any class.就像 KenTsu 提到的,它只是选项模式的一个实现,他为 Blazor 组件做了它,这仅适用于任何 class。

appSettings.json appSettings.json

"PositionOptions": {
    "Title": "Editor",
    "Name": "Joe Smith"
}

Startup.cs启动.cs

services.Configure<PositionOptions>(Configuration.GetSection(nameof(PositionOptions)));

Model Model

public class PositionOptions
{
    public string Title { get; set; }
    public string Name { get; set; }
}

Any class任意 class

public class AnyClass {
    private readonly PositionOptions _positionOptions;

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

    public Get()
    {
        string title = _positionOptions.Title;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM