gpt4 book ai didi

c# - 从类库项目访问 appsettings.json 文件设置

转载 作者:行者123 更新时间:2023-11-30 21:43:29 25 4
gpt4 key购买 nike

我知道如何在 Web 项目上设置 appsettings.json 文件。但是你能告诉我如何从类库项目访问它吗?

我可以在 Web 项目中如下所示配置它。那么如何从类库项目中访问该值?这可能吗?

public class MyConfig
{
public string ApplicationName { get; set; }
public int Version { get; set; }
}

public class Startup
{
public IConfigurationRoot Configuration { get; set; }

public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)

Configuration = builder.Build();
}
}

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();

// Add functionality to inject IOptions<T>
services.AddOptions();

// Add our Config object so it can be injected
services.Configure<MyConfig>(Configuration);
}

public class HomeController : Controller
{
private readonly IOptions<MyConfig> config;

public HomeController(IOptions<MyConfig> config)
{
this.config = config;
}

// GET: /<controller>/
public IActionResult Index() => View(config.Value);
}

最佳答案

需要获取section然后绑定(bind),改这个

// Add our Config object so it can be injected
services.Configure<MyConfig>(Configuration);

// Add our Config object so it can be injected
services.Configure<MyConfig>(option => Configuration.GetSection("MyConfig").Bind(option));

然后您将在 HomeController 或您注入(inject)它的任何其他地方获得值。

public class HomeController : Controller
{

private readonly IOptions<MyConfig> config;

public HomeController(IOptions<MyConfig> config)
{
this.config = config;
}

public IActionResult Index()
{
var value = config.Value.ApplicationName;
var vars = config.Value.Version;
return View();
}
}

appsettings.json

{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
},
"MyConfig": {
"ApplicationName": "My Application Name",
"Version": 1
}
}

enter image description here

我们如何称呼这个不同于 Web 的项目?

Asp.Net Core DI 在创建 Controller 之前解析所有依赖项。所以,我们可以创建一个接口(interface)并实现它。然后我们可以将它注入(inject) Controller 并从那里访问 appsettings.json 设置。

ICategory.cs

public interface ICategory
{
IOptions<MyConfig> config;
IQueryable<Categories> Get();
}

Category.cs

public class Category : ICategory
{
private readonly IOptions<MyConfig> config;

public Category(IOptions<MyConfig> config)
{
this.config = config;
}
public Categories Get(long id)
{
var value = config.Value.ApplicationName;
var vars = config.Value.Version;
return category;
}
}

CategoryController.cs

public CategoriesController(ICategory category)
{
this.category = category;
}

当我们调用 category.Get() 方法时,我们可以访问该方法中的 appsettings.json 设置。

Startup.csConfigureServices方法中注册

services.AddTransient<ICategory, Category>();

关于c# - 从类库项目访问 appsettings.json 文件设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41695889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com