应无所住,而生其心
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net core读取配置文件,读取连接字符串。net core读取任意层,任意位置配置

7291人阅读 2020/2/11 17:05 总访问:4812186 评论:0 收藏:0 手机
分类: .NET Core


获取并注入一个对象

在appsettings.json中配置

随便配置一点的:


新建一个类装起来

public class ImgSaveConfig
{
   public string ImgSaveUrl { get; set; }
}

在ConfigureServices中读取配置文件,然后装到对象中去

services.Configure<ImgSaveConfig>(Configuration.GetSection("ImgSave"));//读取配置文件配置的ImgSave相关配置

然后在使用的地方依赖注入即可:

private IOptions<ImgSaveConfig> _options;
private readonly ILogger<UpImgStreamService> _logger;
public UpImgStreamService(ILogger<UpImgStreamService> logger, IOptions<ImgSaveConfig> options)
{
    _logger = logger;
    _options = options;
}



获取单个配置

获取单个对象有两种情况:

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

    //获取单个
    string test = Configuration["Test"];

    //获取单个(多级中的单个对象)
    string imgSaveUrl = Configuration["ImgSave:ImgSaveUrl"];

    //获取并注入一个对象
    services.Configure<ImgSaveConfig>(Configuration.GetSection("ImgSave"));//读取配置文件配置的ImgSave相关配置
}


如果想要直接获取可以在控制器里边直接注入IConfiguration:


测试代码如下:

private readonly IConfiguration _configuration;
public SendChatGPTController(IConfiguration configuration)
{
    _configuration = configuration;
}

[HttpGet("{id}")]
public string Get(int id)
{
    string visitToken = _configuration["VisitToken"];
    return "value";
}


通过ConfigurationBuilder在任意层获取配置

需要添加Microsoft.Extensions.Configuration.Json的引用:

	<ItemGroup>	
		<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
	</ItemGroup>

不需要引用Microsoft.Extensions.Configuration了,引入Microsoft.Extensions.Configuration.Json的引用包含了Microsoft.Extensions.Configuration的引用




然后设置一下你想要获取配置文件所在的配置的位置(一般都是主项目的appsettings.json撒)

private static IConfigurationRoot BuildConfiguration()
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../AJ.JBLand.API/"))
        .AddJsonFile("appsettings.json", optional: true);

    return builder.Build();
}

然后拿到对象获取即可,比如获取连接字符串

var configuration = BuildConfiguration();

//方法1:
string conn = configuration.GetConnectionString("conn_mysql");
//方法2:
string conn_mysql = configuration["ConnectionStrings:conn_mysql"];
//方法3(这种只能获取基础的数据,不能获取一个对象的哦)
bool writeSQl = configuration.GetValue<bool>("writeSQl");

// 要获取对象需要使用Bind方法将配置绑定到对象
var dbConfigSection = configuration.GetSection("DbConfig");
var dbConfig = new DbConfigModel();
dbConfigSection.Bind(dbConfig); // 将配置绑定到对象
// 注意要使用Bind方法需要在引入一个库:<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />


其实也可以直接在主项目的位置注入一个针对appsettings.json配置的类,这样在其他子项目也方便的去获取了

public void ConfigureServices(IServiceCollection services)
{
    // 加载appsettings.json配置文件
    var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
 
    IConfigurationRoot configuration = builder.Build();
    
    // 将配置注册到服务
    services.AddSingleton<IConfiguration>(configuration);
 
    // 其他服务注册...
}

其他层要获取这个配置文件就通过依赖注入获取到注入的配置对象即可

using Microsoft.Extensions.Configuration;
 
public class MyService
{
    private readonly IConfiguration _configuration;
 
    public MyService(IConfiguration configuration)
    {
        _configuration = configuration;
    }
 
    public string GetConfigValue()
    {
        return _configuration["SomeSetting"];
    }
}

这样就不用在每一层都加入那个指定配置文件地址的代码了



欢迎加群讨论技术,群:677373950(满了,可以加,但通过不了),2群:656732739

评价