ASP.NETCore实现类库项目读取配置文件-创新互联
.NET Core类库项目读取JSON配置文件
在应用程序目录下添加JSON文件是进行如下配置:
10年积累的成都网站建设、网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有新建免费网站建设让你可以放心的选择与我们合作。var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build();
然后读取配置文件的节点,如下:
public void ConfigureServices(IServiceCollection services) { services.Configure(Configuration.GetSection("JeffckySettings")); ...... }
但是如果项目是在类库中呢,当然我们也可以将配置值放在应用程序下的appsettings.json中,但是为了不让其json文件中看起来显得非常臃肿同时在类库中的配置数据我们理应放在类库中来统一管理,所以我们得另外再想方案,总不能在类库中建立startup.cs类,再来实例化Configuration吧,这样想想应该也是可以,我没尝试过,难道就没有很简单的方式么,难道就不能像.net core之前用类来读取web.config我们只需要给出键而得到值吗?或者说通过强类型配置来统一管理配置数据,这个才应该是我们尝试的方向。好了,说了这么多,我们就开干。我们首先来复习下.net core中是如何获取应用程序路径的。
.NET Core获取应用程序路径
在.NET 4.X之前获取当前应用程序根目录路径和名称可以通过如下获取
var basePath = AppDomain.CurrentDomain.BaseDirectory;var appName = AppDomain.CurrentDomain.ApplicationIdentity.FullName;
当然也可以通过如下来获取应用程序根目录而不是得到bin目录
Directory.GetCurrentDirectory()
在.net core中获取bin目录路径通过如下来获取更加简洁。
AppContext.BaseDirectory
在.NET 4.X之前获取应用程序集名称通过如下来获取:
Assembly.GetEntryAssembly().GetName().Name;
在.net core中通过如下来获取:
var name = typeof(T).GetTypeInfo().Assembly.GetName().Name;
版本通过如下来获取(.net core也一样):
Assembly.GetEntryAssembly().GetName().Version.ToString()
在类库项目中我们利用强类型配置来实现读取配文件数据,我们首先需要下载如下扩展。
在ConfigurationBuilder类中如下一个Add添加方法:
// // 摘要: // Adds a new configuration source. // // 参数: // source: // The configuration source to add. // // 返回结果: // The same Microsoft.Extensions.Configuration.IConfigurationBuilder. public IConfigurationBuilder Add(IConfigurationSource source);
对于 AddJsonFile 扩展方法来添加JSON文件名,文件路径已经通过 SetBasePath() 方法来实现,一切配置都是基于 IConfigurationBuilder 接口,其中就有一个 JsonConfigurationSource 类,实现如下:
// // 摘要: // Represents a JSON file as an Microsoft.Extensions.Configuration.IConfigurationSource. public class JsonConfigurationSource : FileConfigurationSource { public JsonConfigurationSource(); // // 摘要: // Builds the Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider // for this source. // // 参数: // builder: // The Microsoft.Extensions.Configuration.IConfigurationBuilder. // // 返回结果: // A Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider public override IConfigurationProvider Build(IConfigurationBuilder builder); }
我们再看其父类就有一个添加JSON文件路径的方法,如下:
所以我们从这里可以看出添加JSON文件的方法除了通过扩展方法来实现外还有直接实例化JsonConfigurationSource来实现,如下:
IConfiguration config = new ConfigurationBuilder() .SetBasePath(currentClassDir) .AddJsonFile("appsettings.json", false, true) .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true }) .Build();
上述添加JSON文件皆可,我发现添加JSON文件必须设置JSON文件所在的目录即必须首先要设置 SetBasePath 方法,否则会报如下错误:
我们搞个测试JSON文件放在当前项目(StudyEFCore.Data)中如下:
最终读取类库项目JSON配置文件,将其封装起来就成了如下这个样子:
public class JsonConfigurationHelper { public T GetAppSettings(string key) where T : class, new() { var baseDir = AppContext.BaseDirectory; var indexSrc = baseDir.IndexOf("src"); var subToSrc = baseDir.Substring(0, indexSrc); var currentClassDir = subToSrc + "src" + Path.DirectorySeparatorChar + "StutdyEFCore.Data"; IConfiguration config = new ConfigurationBuilder() .SetBasePath(currentClassDir) .Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true }) .Build(); var appconfig = new ServiceCollection() .AddOptions() .Configure (config.GetSection(key)) .BuildServiceProvider() .GetService >() .Value; return appconfig; } }
由上有一个还未解决的问题就是如何得到当前类库项目的路径,没有想到一个好的法子,不知看到此文的你有何高见。简短的调用则是如下:
var config = new JsonConfigurationHelper(); var person = config.GetAppSettings("JeffckySettings"); var name = person.Name; var age = person.Age;
结果如下:
我们将其类修改为 ConfigurationManager ,然后将其 GetAppSettings 方法定义为静态方法,最后如下调用是不是满足了在.net core之前读取web.config中配置数据的问题。哈哈哈:
var person = ConfigurationManager.GetAppSettings("JeffckySettings");
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。
网站栏目:ASP.NETCore实现类库项目读取配置文件-创新互联
本文链接:http://pwwzsj.com/article/ecceh.html