从类库访问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"; } }
有关详细信息,请查看此
- 的ExecuteScalar(); 使用scope_identity()生成“System.InvalidCastException:指定的强制转换无效”
- 服务器标签没有格式错误
- 没有配置身份validation处理程序来validation该方案:Microsoft.AspNet.Identity.External
- 命名空间’System’中不存在类型或命名空间名称’Linq’
- 超出存储分配。 服务器响应为:4.3.1邮件大小超过固定的最大邮件大小
- 使用自定义TextWriter时,OutputStream不可用
- RegEx用空格替换字符串中的特殊字符? asp.net c#
- WebAPI OData操作示例 – CheckOut和CheckOutMany操作之间的区别
- c#/ Linq总和在哪里