频道栏目
首页 > 资讯 > asp > 正文

ASP.NET CORE 读取配置文件 读取自定义配置文件

18-01-10        来源:[db:作者]  
收藏   我要投稿
简介

我们在读取配置文件(一) appsettings.json中介绍了,如何读取appsettings.json.

但随之产生了问题:我们使用的是在 Startup.cs 中(如下图)来实现配置读取,有两个问题 ① 我们如果定义N种配置,是否要再这里添加N条这样的配置 ; ② 如果我们的配置不想写在appsettings.json中呢

解决问题

  带着上面的两个问题,我们首先来添加一个配置文件 siteconfig.json

{
    "SiteBaseConfig": {
      //文件上传路径
      "FileUpPath": "/upload/",
      //是否启用单用户登录
      "IsSingleLogin": "True",
      //允许上传的文件格式
      "AttachExtension": "gif,jpg,jpeg,png,bmp,rar,zip,doc,docx,xls,xlsx,ppt,pptx,txt,flv,apk,mp4,mpg,ts,mpeg,mp3,bak,pdf",
      //图片上传最大值KB
      "AttachImagesize": 12400
    }
  }

我们在 读取文件配置(一)中的配置类ApplicationConfiguration

 1 public class ApplicationConfiguration
 2     {
 3         #region 属性成员
 4 
 5         /// 
 6         /// 文件上传路径
 7         /// 
 8         public string FileUpPath { get; set; }
 9         /// 
10         /// 是否启用单用户登录
11         /// 
12         public bool IsSingleLogin { get; set; }
13         /// 
14         /// 允许上传的文件格式
15         /// 
16         public string AttachExtension { get; set; }
17         /// 
18         /// 图片上传最大值KB
19         /// 
20         public int AttachImagesize { get; set; }
21         #endregion
22     }

在 project.json的buildOptions添加"copyToOutput": "siteconfig.json",让该文件在编译的时候自动拷贝到输出目录下(默认为bin目录):

修改读取文件配置(一)的领域层AppConfigurtaionServices

public class AppConfigurtaionServices
  {
    

  public T GetAppSettings(string key)where T:class,new()
    {
      IConfiguration config = new ConfigurationBuilder()
                  .Add(new JsonConfigurationSource { Path= "siteconfig.json", ReloadOnChange=true })
                  .Build();

    var appconfig= new ServiceCollection()
              .AddOptions()
              .Configure(config.GetSection(key))
              .BuildServiceProvider()
              .GetService<>>()
              .Value;

    return appconfig;
    }

}  

说明:我们首先创建了一个ConfigurationBuilder对象,并在它上面注册了一个JsonConfigurationSource。在创建这个JsonConfigurationSource对象的时候,除了指定配置文件(“siteconfig.json”)的路径之外,我们还将它的ReloadOnChange属性设置为True。这个ReloadOnChange属性的含义就是当原始配置文件的内容发生改变的时候是否需要重新加载配置。

这时候我们会发现Configure(config.GetSection(key)) 报错:

我查看了我们之前在Startup中的 services.Configure() 发现,这个里面的参数是有两个重载的 一个是 IConfiguration 一个是 System.Action,那么为什么这里重载不出来了呢?

十分不解,最后发现是少了扩展类Microsoft.Extensions.Options.ConfigurationExtensions

我们通过 NuGet 添加这个 Install-PackageMicrosoft.Extensions.Options.ConfigurationExtensions 问题得到解决,在此感谢 @Artech

我们来测试一下:

OK,这样,我们在文章开始提出的两个问题就都得到了解决!

希望跟大家一起学习Asp.net Core

刚开始接触,水平有限,很多东西都是自己的理解和翻阅网上大神的资料,如果有不对的地方和不理解的地方,希望大家指正!

虽然Asp.net Core 现在很火热,但是网上的很多资料都是前篇一律的复制,所以有很多问题我也暂时没有解决,希望大家能共同帮助一下!

相关TAG标签
上一篇:窗体无边框拖动
下一篇:CodeForces Gym100935 水题专场
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站