Asp.Net Core 在不能使用注入方式的情况下读取配置文件

最近在用Asp.Net Core 做项目,遇到一个在不能使用注入的类中读取配置文件的问题。

大家都知道在core中推荐使用注入的方式读取配置文件,这样读取到的值是强类型的,弥补了web.config的缺陷。

当我用着正爽的时候遇到了一个静态类也需要读取配置文件的问题,纠结了几天才又了这篇博文。

最初的版本是下面这个样子

public static class ConfigurationManager
{
    static IConfiguration Configuration;
    static ConfigurationManager()
    {
        var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public static string GetValue(string key)
    {
        return Configuration[key];
    }

    public static T GetValue<T>(string key)
    {
        return Configuration.GetValue<T>(key);
    }
}

上面的代码只能读取配置appsettings.json中的配置,由于我们的开发环境有好多套,这个并没有满足我们的需求

但是这个工具类是静态的不能将环境变量注入进来,这是困扰我的一个问题,最后终于在师傅的帮助下有了解决方案,也就是下面这个版本

public static class ConfigurationManagerV2
{
    static IConfiguration Configuration;
    static ConfigurationManagerV2()
    {        // 这里读取环境变量
        var provider = new EnvironmentVariablesConfigurationProvider();
        provider.Load();
        provider.TryGet("ASPNETCORE_ENVIRONMENT", out string environmentName);

        var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true)
        .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    /// <summary>
    ///
    /// </summary>
    /// <param name="key">不区分大小写</param>
    /// <returns></returns>
    public static string GetValue(string key)
    {
        return Configuration[key];
    }

    public static T GetValue<T>(string key)
    {
        return Configuration.GetValue<T>(key);
    }

}

这样我们就可以在静态文件中使用配置文件,并且可以根据环境变量来读取不同的配置文件。

大功告成!

原文地址:https://www.cnblogs.com/taohonggou/p/8858956.html

时间: 2024-07-30 08:31:21

Asp.Net Core 在不能使用注入方式的情况下读取配置文件的相关文章

【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在我们之前的Asp.net mvc 开发中,一提到配置文件,我们不由的想到 web.config 和 app.config,在 core 中,我们看到了很多的变化,新的配置系统显得更加轻量级,具有更好的扩展性,并且支持多样化的数据源. 博客园对于这个的讲解很多,比如:Artche ,但是,没有点基础看老A的博客还是有些吃力的,对于老A介绍的配置,我也是看的一头雾水,在后面的文章中,我会用像我们这些菜鸟容易接受的方式,重新解

【无私分享:ASP.NET CORE 项目实战(第七章)】读取配置文件(二) 读取自定义配置文件

目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 我们在 读取配置文件(一) appsettings.json 中介绍了,如何读取appsettings.json. 但随之产生了问题:我们使用的是在 Startup.cs 中(如下图)来实现配置读取,有两个问题 ① 我们如果定义N种配置,是否要再这里添加N条这样的配置 : ② 如果我们的配置不想写在appsettings.json中呢 解决问题 带着上面的两个问题,我们首先来添加一个配置文件 siteconfig.json

ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】

通过上一篇的介绍我们应该对实现在ServiceProvider的总体设计有了一个大致的了解,但是我们刻意回避一个重要的话题,即服务实例最终究竟是采用何种方式提供出来的.ServiceProvider最终采用何种方式提供我们所需的服务实例取决于最终选择了怎样的ServiceCallSite,而服务注册是采用的ServiceDescriptor有决定了ServiceCallSite类型的选择.我们将众多不同类型的ServiceCallSite大体分成两组,一组用来创建最终的服务实例,另一类则与生命周

ASP.NET Core中的依赖注入(2):依赖注入(DI)

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/project-layout.html http://www.yuanjiaocheng.net/ASPNET-CORE/projectjson.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-configuration.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-middleware.htm

ASP.NET Core中的依赖注入(5):ServicePrvider实现揭秘【补充漏掉的细节】

到目前为止,我们定义的ServiceProvider已经实现了基本的服务提供和回收功能,但是依然漏掉了一些必需的细节特性.这些特性包括如何针对IServiceProvider接口提供一个ServiceProvider对象,何创建ServiceScope,以及如何提供一个服务实例的集合. 一.提供一个ServiceProvider对象 我们知道当将服务类型指定为IServiceProvider接口并调用ServiceProvider的GetService方法是,ServiceProvider对象本

ASP.NET Core DI 手动获取注入对象

原文:ASP.NET Core DI 手动获取注入对象 ASP.NET Core DI 一般使用构造函数注入获取对象,比如在ConfigureServices配置注入后,通过下面方式获取: private IValueService _valueService; public ValueController(IValueService valueService) { _valueService = valueService; } 那如果手动获取注入对象呢? 第一种获取方式(有时会获取不到,不推荐

Asp.Net Core中HttpClient的使用方式

原文:Asp.Net Core中HttpClient的使用方式 在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数.使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变化,本次就讲解一下Asp.Net Core2.1前后使用的两种方式. 一.原先HttpClient使用方式 一般来讲,喜欢要用的时候才会选择去获取资源,因此,当在有需求时才会用HttpClient去调用资源,便会使用如下这种方式或其它方

ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】

本系列前面的文章我们主要以编程的角度对ASP.NET Core的依赖注入系统进行了详细的介绍,如果读者朋友们对这些内容具有深刻的理解,我相信你们已经可以正确是使用这些与依赖注入相关的API了.如果你还对这个依赖注入系统底层的实现原理具有好奇心,可以继续阅读这一节的内容. 目录一.ServiceCallSite 二.Service 三.ServiceEntry 四.ServiceTable 五.ServiceProvider 作为DI容器的体现,ServiceProvider是ASP.NET Co

asp.net core 中灵活的配置方式

asp.net core支持外部文件和命令行参数方式来配置系统运行所需要的配置信息,我们从下面两个常用场景来具体说下具体使用方法. 一.监听地址及端口配置 1,命令行方式 asp.net core系统通过命令行方式启动,使用的命令如下: dotnet run 上面的命令直接在源代码目录下执行,便可以编译程序并运行.那对于已经发布好的程序,就不能使用上面的指令了,应该使用下面的指令: dotnet 程序集文件名(程序集文件名就是程序发布后生成的dll文件) 上面两个指令都能够启动应用程序.程序启动