从类库访问Asp.net-core中的appsetting.json

我试图从类库中访问appsetting.json文件。 到目前为止,我找到的解决方案是创建一个从Microsoft.Extensions.Configuration实现接口IConfiguration的配置类,并将json文件添加到类中并从中读取。

 var configuration = new Configuration(); configuration.AddJsonFile("appsetting.json"); var connectionString= configuration.Get("connectionString"); 

这似乎是不好的选择,因为每次我们必须访问appsetting配置时我们必须添加json文件。 我们没有像ASP.NET中的 ConfigurationManager那样的替代方案。

我假设您要从Web应用程序访问appsettings.json文件,因为类库默认情况下没有appsettings.json

我创建了一个模型类,其属性与appsettings.json中的部分中的设置相匹配。

appsettings.json中的部分

 "ApplicationSettings": { "SmtpHost": "mydomain.smtp.com", "EmailRecipients": "me@mydomain.com;other@mydomain.com" } 

匹配模型类

 namespace MyApp.Models { public class AppSettingsModel { public string SmtpHost { get; set; } public string EmailRecipients { get; set; } } } 

然后填充该模型类并将其添加到DI容器中的IOptions集合(这在Startup类的Configure()方法中完成)。

 services.Configure(Configuration.GetSection("ApplicationSettings")); // Other configuration stuff services.AddOptions(); 

然后,您可以通过在构造函数中将其添加为参数,从框架调用的任何方法访问该类。 该框架处理查找并向构造函数提供类。

 public class MyController: Controller { private IOptions settings; public MyController(IOptions settings) { this.settings = settings; } } 

然后,当类库中的方法需要设置时,我要么单独传递设置,要么传递整个对象。

我知道答案已被接受,但这个问题在Google上是最受欢迎的,而OP的问题是关于类库而不是ASP.NET Web App或WebApi,这是接受的答案所使用的。

IMO,类库不应该使用应用程序设置,并且应该对这些设置不可知。 如果您需要在类库中进行应用程序设置,那么您应该从消费者那里提供这些设置。 你可以看到这个问题的一个例子

我知道这个问题有一个公认的答案,但问题是关于类库以及从类库中读取appsettings.json的方法如下:

创建一个具有与设置文件中的属性匹配的属性的模型:

 public class ConfigurationManager { public string BaseUrl { get; set; } } 

在appsettings.json中添加实际设置

  "ConfigurationManager": { "BaseUrl": "myValue" } 

现在在startup.cs中使用您的模型注册appsettings.json部分:

  services.Configure(Configuration.GetSection("ConfigurationManager")); 

在您的类库中创建一个正在使用的类

 using Microsoft.Extensions.Options; 

并获取您的配置设置:

 using Microsoft.Extensions.Options; public class KeyUrls: IKeyUrls { public string BaseUrl = ""; private readonly IOptions _configurationService; public KeyUrls(IOptions configurationservice) { _configurationService = configurationservice; BaseUrl = _configurationService.Value.BaseUrl; } public string GetAllKeyTypes() { return $"{BaseUrl}/something"; } public string GetFilteredKeys() { return $"{BaseUrl}/something2"; } } 

有关详细信息,请查看此