如何在ASP.NET核心类库项目中读取配置文件
序
最近,一个朋友问如何在?net核心类库,而我当时是懵懂的。我也不知道这个提到的有多好,所以这两天了解了相关内容之后就出现了这篇文章。通常,我们在应用程序目录中有一个appsettings.json文件,所有相关的配置都会放在这个json文件中,但是如果我构建一个类库项目,对于一些配置,比如键或者其他硬编码的数据,放在json文件中。之前。net core,配置文件是web.config,并且有相关的类来读取节点上的数据。现在,它是JSON文件。网络核心。那我们该怎么办?这篇文章应运而生。
那个。NET Core类库项目读取JSON配置文件
在应用程序目录中添加JSON文件的配置如下:
var builder=新配置构建器()。SetBasePath(env。ContentRootPath)。AddJsonFile('appsettings.json ',optional: true,reloadOnChange: true)。AddJsonFile($'appsettings。{env。环境名称}。json ',optional: true)。AddEnvironmentVariables();配置=构建器。build();然后按如下方式读取配置文件的节点:
public void ConfigureServices(IServiceCollection services){ services。配置博客视图模型(配置。GetSection(' Jeffckysettings ');但是如果项目在类库中,当然我们也可以把配置值放在应用下的appsettings.json中,但是为了不让它的json文件看起来很臃肿,同时我们应该把配置数据放在类库中进行统一管理,所以我们要想另外一个方案,不能在类库中建立startup.cs类。让我们再次实例化配置。这样想应该没问题。我以前没试过。不是有很简单的方法吗?难道我们不能用类来像。以前的网芯?我们只需要给密钥和获取值?或者通过强类型配置统一管理配置数据,这是我们应该尝试的方向。说了这么多,我们开始工作吧。让我们首先回顾一下如何获取应用程序路径。网络核心。
那个。NET Core获取应用程序路径
当前应用程序根目录的路径和名称。NET 4。x可以通过以下方式获得
var basePath=AppDomain。CurrentDomain . BaseDirectoryvar appName=AppDomain。current domain . applicationidentity . full name;当然,您也可以获取应用程序根目录,而不是bin目录,如下所示
目录。获取中的bin目录路径。网络核心。更简洁的说法是这样得到的。
由AppContext获取的应用程序集名称。之前的BaseDirectory。NET 4。x的计算公式如下:
组装。GetEntryAssembly()。GetName()。名称;把它弄进去。净核心如下:
var name=typeof(T)。GetTypeInfo().Assembly.GetName()。名称;版本获取如下(对于。净核心):
组装。getentryassembly()。getname()。版本。tostring()在类库项目中,我们使用强类型配置来读取配置文件数据。我们首先需要下载以下扩展。
在ConfigurationBuilder类中添加以下添加方法:
////抽象: //添加新的配置源。////参数://source ://要添加的配置源。/////返回结果://相同的Microsoft . extensions . configuration . iconfigulationbuilder . public iconfigulationbuilder Add(iconfigulationsource来源);使用AddJsonFile扩展方法添加JSON文件名,文件路径已经通过SetBasePath()方法实现。所有配置都基于IConfigurationBuilder接口,包括一个JsonConfigurationSource类,实现如下:
////摘要: //将一个JSON文件表示为一个微软。扩展。配置。icon configuration source。公众的类JsonConfigurationSource :文件配置源{ public JsonConfigurationSource();////摘要: //构建微软。此源的扩展。////参数://builder ://微软。扩展。配置。iconfigulationbuilder。////返回结果: //A微软。扩展。配置。JSON。jsonconfigurationprovider公共覆盖iconfigulationprovider Build(iconfigulationbuilder);}我们再看其父类就有一个添加JSON文件路径的方法,如下:
所以我们从这里可以看出添加JSON文件的方法除了通过扩展方法来实现外还有直接实例化JsonConfigurationSource来实现,如下:
图标配置配置=新配置生成器()。SetBasePath(currentClassDir).AddJsonFile('appsettings.json ',false,true).添加(新的JsonConfigurationSource { Path=' appsettings。' JSON ',可选=false,ReloadOnChange=true }).build();上述添加JSON文件皆可,我发现添加JSON文件必须设置JSON文件所在的目录即必须首先要设置SetBasePath方法,否则会报如下错误:
我们搞个测试JSON文件放在当前项目(研究核心。数据)中如下:
最终读取类库项目JSON配置文件,将其封装起来就成了如下这个样子:
公共类JsonConfigurationHelper { public T GetAppSettingsT(字符串键),其中T :类,new() { var baseDir=AppContext .base director yvar index src=Basedir .IndexOf(' src ');var subToSrc=baseDir .子串(0,指数src);var CurrentClassDir=subTosrc ' src '路径directorysparorchar ' studdyefcore .数据;图标配置配置=新配置生成器()。SetBasePath(currentClassDir).添加(新的JsonConfigurationSource { Path=' appsettings。' JSON ',可选=false,ReloadOnChange=true }).build();var app config=new service collection().附加选项().配置(配置GetSection(key)).BuildServiceProvider().GetServiceIOptionsT().价值;返回appconfig} }由上有一个还未解决的问题就是如何得到当前类库项目的路径,没有想到一个好的法子,不知看到此文的你有何高见。简短的调用则是如下:
var config=new JsonConfigurationHelper();var person=config .getappsettings人(“Jeffckysettings”);var name=person .名称;定义变量年龄=人。年龄;结果如下:
我们将其类修改为配置管理器,然后将其GetAppSettings方法定义为静态方法,最后如下调用是不是满足了在。净芯之前读取网络。配置中配置数据的问题。哈哈哈:
var person=配置经理.getappsettings人(“Jeffckysettings”);总结
本节我们详细讲解了在。净芯类库项目中如何读取JSON配置中的数据但是还是有点不足,你有何高见?
版权声明:如何在ASP.NET核心类库项目中读取配置文件是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。