.Net Standard(.Net Core)实现获取配置信息

Posted snailblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.Net Standard(.Net Core)实现获取配置信息相关的知识,希望对你有一定的参考价值。

一、前言

在.Net Framework框架有专门获取webconfig配置的方法供我们使用,但是在.Net Core或者.Net Standard中没有可以直接使用的方法来获取配置文件信息,下面就来实现获取配置信息。

二、获取配置信息的实现

在.Net Core中,他的配置信息的载体是一个json文件,我们现在就计划所有项目(包含.Net Framework和.Net Standard(.Net Core)框架)都是json文件作为配置的载体。

首先通过Nuget加载如下的包:

Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Json
Install-Package Microsoft.Extensions.DependencyInjection
Install-Package Microsoft.Extensions.Options
Install-Package Microsoft.Extensions.Options.ConfigurationExtensions

现在我们使用json配置文件的内容有一下格式:

  "ConnectionStrings": 
    "CxyOrder": "Server=LAPTOP-AQUL6MDE\\MSSQLSERVERS;Database=CxyOrder;User ID=sa;Password=123456;Trusted_Connection=False;"
  ,
  "Appsettings": 
    "SystemName": "PDF .NET CORE",
    "Date": "2017-07-23",
    "Author": "PDF"
  ,
  "ServiceUrl": "https://www.baidu.com/getnews"

创建PFTConfiguration.cs文件,代码如下:

 public class PFTConfiguration
    
        /// <summary>
        /// PFTConfiguration.Configuration.GetConnectionString("CxyOrder"); 
        /// PFTConfiguration.Configuration["ServiceUrl"];
        /// PFTConfiguration.Configuration["Appsettings:SystemName"];
        /// </summary>
        public static IConfiguration Configuration  get; set; 
        static PFTConfiguration()
        
            Configuration = new ConfigurationBuilder()
            .Add(new JsonConfigurationSource  Path = "appsettings.json", ReloadOnChange = true )
            .Build();
        

        /// <summary>
        /// 获取配置信息
        /// </summary>
        /// <param name="path">json文件类型</param>
        /// <typeparam name="T">返回实体类型</typeparam>
        /// <param name="key">json关键字</param>
        /// <returns></returns>
        public static T GetAppsettings<T>(string key, string path) where T : class, new()
        
            try
            
                if (string.IsNullOrWhiteSpace(path))
                
                    throw new Exception("解析配置错误,配置文件路径为空");
                
                if (string.IsNullOrWhiteSpace(key))
                
                    throw new Exception("解析配置错误,配置key为空");
                
                var config = new ConfigurationBuilder()
                    .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                    .Add(new JsonConfigurationSource  Path = path, ReloadOnChange = true )
                    .Build();
                var appconfig = new ServiceCollection()
                    .AddOptions()
                    .Configure<T>(config.GetSection(key))
                    .BuildServiceProvider()
                    .GetService<IOptions<T>>()
                    .Value;
                return appconfig;
            
            catch (Exception ex)
            
                throw new Exception("解析配置(对象)异常", ex);
            

        


        /// <summary>
        /// 获取配置信息
        /// </summary>
        /// <param name="key">json关键字</param>
        /// <param name="path">json文件类型</param>
        /// <returns></returns>
        public static string GetAppsettings(string key, string path)
        
            try
            
                if (string.IsNullOrWhiteSpace(path))
                
                    throw new Exception("解析配置错误,配置文件路径为空");
                
                if (string.IsNullOrWhiteSpace(key))
                
                    throw new Exception("解析配置错误,配置key为空");
                
                var config = new ConfigurationBuilder()
                    .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                    .Add(new JsonConfigurationSource  Path = path, ReloadOnChange = true, Optional = false )
                    .Build();
                var appconfig = config.GetSection(key).Value;
                return appconfig;
            
            catch (Exception ex)
            
                throw new Exception("解析配置(字符串)异常", ex);
            
        


    

里面定义了3种获取方法

1、PFTConfiguration.Configuration["Appsettings:SystemName"] 文件路径默认为appsettings.json,然后通过节点来获取,这个方式有点类似于.Net Framework中获取配置的方法

2、PFTConfiguration.GetAppsettings<T>(string key, string path),他是获取指定配置文件,指定节点,以T对象的形式返回节点内容

3、PFTConfiguration.GetAppsettings(string key, string path),他是获取指定配置文件,指定节点,以字符串的形式返回节点内容

以上是关于.Net Standard(.Net Core)实现获取配置信息的主要内容,如果未能解决你的问题,请参考以下文章

.Net Standard(.Net Core)实现获取配置信息

.NET Core 是 .NET Standard 的“实现”吗?

NET Standard vs Net Core App:创建 .NET Core 项目时(使用控制台或类库)

.net Core 多目标和 .net Standard 有啥区别?

如何在 Visual Studio 中将 .NET Framework 更改为 .NET Standard/Core?

.Net Core、Portable、Standard、Compact、UWP 和 PCL 之间的区别?