[英]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 或者是一个未分配的局部变量取决于我在哪里写变量。
public class PositionOptions
{
public const string Position = "Position";
public string Title { get; set; }
public string Name { get; set; }
}
services.Configure<PositionOptions>(Configuration.GetSection(PositionOptions.Position));
"Position": {
"Title": "Editor",
"Name": "Joe Smith"
}
@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.