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



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

从剃须刀组件我简单地注入:

@注入IConfiguration_config

访问我所需要的一切,比如:_config.GetConnectionString("默认"(

但在任何一个班级里,怎么能做到这一点呢?当我尝试做时

IConfiguration _config;

它说,当我想访问config为null或是未分配的局部变量的数据时,取决于我写入变量的位置。

  • 首先,您应该创建自定义配置模型
public class PositionOptions
{
public const string Position = "Position";
public string Title { get; set; }
public string Name { get; set; }
}
  • 然后,在startup.cs中注册配置模型
services.Configure<PositionOptions>(Configuration.GetSection(PositionOptions.Position));
  • 别忘了appsetting.json
"Position": {
"Title": "Editor",
"Name": "Joe Smith"
}
  • 最后,在index剃刀中注射眼压
@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?"/>

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

appSettings.json

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

型号

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

启动.cs

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

任何类别

public class AnyClass {
private readonly PositionOptions _positionOptions;
public MyClass(IOptions<PositionOptions> positionOptions)
{
_positionOptions = positionOptions.Value;
}
public Get()
{
string title = _positionOptions.Title;
}
}

我了解它是如何工作的,所以我可以自己回答我的问题

事实上,您只需要在类中添加一个构造函数,并将Iconfiguration作为参数,就可以使用它并调用存储在应用程序setting中的数据:

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

private readonly IConfiguration _config;


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

你可以在你的方法中使用它:

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

最新更新