Par*_*Rao 29 c# asp.net-core-mvc .net-core asp.net-core
我试图appsetting.json
从类库中访问文件.到目前为止,我发现的解决方案是创建实现接口的配置类IConfiguration
,从 Microsoft.Extensions.Configuration
和JSON文件添加到类,并从相同的阅读.
var configuration = new Configuration();
configuration.AddJsonFile("appsetting.json");
var connectionString= configuration.Get("connectionString");
Run Code Online (Sandbox Code Playgroud)
这似乎是不好的选择,因为每次我们必须访问appsetting配置时我们必须添加json文件.我们不要有任何替代像ConfigurationManager
在 ASP.NET.
Ste*_*ter 39
我知道答案已经被接受了,但是这个问题在Google上是最受欢迎的,而OP的问题是关于类库,而不是ASP.NET Web App或WebApi,这是接受的答案所使用的.
IMO,类库不应该使用应用程序设置,并且应该对这些设置不可知.如果您需要在类库中进行应用程序设置,那么您应该从您的使用者那里提供这些设置.你可以看到这个问题的一个例子
Cli*_*t B 27
我假设您appsettings.json
要从Web应用程序访问该文件,因为类库appsettings.json
默认情况下没有.
我创建了一个模型类,其属性与一个部分中的设置相匹配appsettings.json
.
appsettings.json中的部分
"ApplicationSettings": {
"SmtpHost": "mydomain.smtp.com",
"EmailRecipients": "me@mydomain.com;other@mydomain.com"
}
Run Code Online (Sandbox Code Playgroud)
匹配模型类
namespace MyApp.Models
{
public class AppSettingsModel
{
public string SmtpHost { get; set; }
public string EmailRecipients { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
然后填充该模型类并将其添加到IOptions
DI容器中的集合中(这Configure()
在Startup类的方法中完成).
services.Configure<AppSettingsModel>(Configuration.GetSection("ApplicationSettings"));
// Other configuration stuff
services.AddOptions();
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过在构造函数中将其添加为参数,从框架调用的任何方法访问该类.该框架处理查找并向构造函数提供类.
public class MyController: Controller
{
private IOptions<AppSettingsModel> settings;
public MyController(IOptions<AppSettingsModel> settings)
{
this.settings = settings;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当类库中的方法需要设置时,我要么单独传递设置,要么传递整个对象.
小智 9
这很容易做到
string c = Directory.GetCurrentDirectory();
IConfigurationRoot configuration =
newConfigurationBuilder().SetBasePath(c).AddJsonFile("appsettings.json").Build();
string connectionStringIs = configuration.GetConnectionString("MyConnection");
Run Code Online (Sandbox Code Playgroud)
从最后一行你可以得到连接字符串
如果要配置上下文,请额外编写以下代码:
optionsBuilder.UseSqlServer(connectionStringIs); //inside protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
Run Code Online (Sandbox Code Playgroud)
不要忘记安装和使用这些软件包:-
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.FileExtensions;
using Newtonsoft.Json;
using Microsoft.Extensions.Configuration.Json;
using System.IO;
Run Code Online (Sandbox Code Playgroud)
我知道这个问题有一个公认的答案,但问题是关于类库以及从类库中读取appsettings.json的方法如下:
创建一个具有与设置文件中的属性匹配的属性的模型:
public class ConfigurationManager
{
public string BaseUrl { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在appsettings.json中添加实际设置
"ConfigurationManager": {
"BaseUrl": "myValue"
}
Run Code Online (Sandbox Code Playgroud)
现在在startup.cs中使用您的模型注册appsettings.json部分:
services.Configure<ConfigurationManager>(Configuration.GetSection("ConfigurationManager"));
Run Code Online (Sandbox Code Playgroud)
在您的类库中创建一个正在使用的类
using Microsoft.Extensions.Options;
Run Code Online (Sandbox Code Playgroud)
并获取您的配置设置:
using Microsoft.Extensions.Options;
public class KeyUrls: IKeyUrls
{
public string BaseUrl = "";
private readonly IOptions<ConfigurationManager> _configurationService;
public KeyUrls(IOptions<ConfigurationManager> configurationservice)
{
_configurationService = configurationservice;
BaseUrl = _configurationService.Value.BaseUrl;
}
public string GetAllKeyTypes()
{
return $"{BaseUrl}/something";
}
public string GetFilteredKeys()
{
return $"{BaseUrl}/something2";
}
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看此
除了问题有一个可以接受的答案外,我相信没有任何一个仅适用于一个类库,而不具有Startup项目或与Asp.NetCore堆栈或IServiceCollection的依赖关系。
这是我从类库中读取配置的方法:
using Microsoft.Extensions.Configuration;
using System.IO;
public class ConfigSample
{
public ConfigSample
{
IConfigurationBuilder builder = new ConfigurationBuilder();
builder.AddJsonFile(Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json"));
var root = builder.Build();
var sampleConnectionString = root.GetConnectionString("your-connection-string");
}
}
Run Code Online (Sandbox Code Playgroud)
需要以下nuget软件包:
归档时间: |
|
查看次数: |
34075 次 |
最近记录: |