如何从任何 class blazor 服务器端读取 appsetting.json
How to read appsetting.json from any class blazor serverside
我知道如何访问 appsetting.json fron razor 组件,但如何从 blazor 服务器端项目中的任何 class 访问?
从剃须刀组件我简单地注入:
@inject IConfiguration_config
并访问我需要的所有内容,例如:
_config.GetConnectionString("默认")
但是如何从任何 class 做同样的事情呢?
当我尝试做
IConfiguration_config;
它说当我想要访问数据时 _config 为空或者是一个未分配的局部变量取决于我在哪里写入变量。
- 首先,您应该创建自定义配置模型
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.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?"/>
我明白它是如何工作的,所以我可以自己回答我的问题
事实上,您只需在 class 中添加一个构造函数并将 Iconfiguration 作为参数,您就可以使用它并调用存储在应用程序设置中的数据:
public class MyClass
{
public MyClass (IConfiguration config)
{
_config = config;
}
private readonly IConfiguration _config;
void MyMethod(){
.....
}
}
您可以在您的方法之后使用它:
string myCon = _config.GetConnectionString("Default");
这只是对@khalidAb 和@KenTsu 回答的补充,也许您会发现它很有用。我通常这样工作。就像 KenTsu 提到的,它只是 Options 模式的一个实现,他是为 Blazor 组件做的,这只适用于任何 class.
appSettings.json
"PositionOptions": {
"Title": "Editor",
"Name": "Joe Smith"
}
Startup.cs
services.Configure<PositionOptions>(Configuration.GetSection(nameof(PositionOptions)));
型号
public class PositionOptions
{
public string Title { get; set; }
public string Name { get; set; }
}
任何class
public class AnyClass {
private readonly PositionOptions _positionOptions;
public MyClass(IOptions<PositionOptions> positionOptions)
{
_positionOptions = positionOptions.Value;
}
public Get()
{
string title = _positionOptions.Title;
}
}
我知道如何访问 appsetting.json fron razor 组件,但如何从 blazor 服务器端项目中的任何 class 访问?
从剃须刀组件我简单地注入:
@inject IConfiguration_config
并访问我需要的所有内容,例如: _config.GetConnectionString("默认")
但是如何从任何 class 做同样的事情呢? 当我尝试做
IConfiguration_config;
它说当我想要访问数据时 _config 为空或者是一个未分配的局部变量取决于我在哪里写入变量。
- 首先,您应该创建自定义配置模型
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.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?"/>
我明白它是如何工作的,所以我可以自己回答我的问题
事实上,您只需在 class 中添加一个构造函数并将 Iconfiguration 作为参数,您就可以使用它并调用存储在应用程序设置中的数据:
public class MyClass
{
public MyClass (IConfiguration config)
{
_config = config;
}
private readonly IConfiguration _config;
void MyMethod(){
.....
}
}
您可以在您的方法之后使用它:
string myCon = _config.GetConnectionString("Default");
这只是对@khalidAb 和@KenTsu 回答的补充,也许您会发现它很有用。我通常这样工作。就像 KenTsu 提到的,它只是 Options 模式的一个实现,他是为 Blazor 组件做的,这只适用于任何 class.
appSettings.json
"PositionOptions": {
"Title": "Editor",
"Name": "Joe Smith"
}
Startup.cs
services.Configure<PositionOptions>(Configuration.GetSection(nameof(PositionOptions)));
型号
public class PositionOptions
{
public string Title { get; set; }
public string Name { get; set; }
}
任何class
public class AnyClass {
private readonly PositionOptions _positionOptions;
public MyClass(IOptions<PositionOptions> positionOptions)
{
_positionOptions = positionOptions.Value;
}
public Get()
{
string title = _positionOptions.Title;
}
}