• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

【无私分享:ASP.NET CORE 项目实战】目录索引

 

简介

 

  我们在 读取配置文件(一) 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         /// <summary>
 6         /// 文件上传路径
 7         /// </summary>
 8         public string FileUpPath { get; set; }
 9         /// <summary>
10         /// 是否启用单用户登录
11         /// </summary>
12         public bool IsSingleLogin { get; set; }
13         /// <summary>
14         /// 允许上传的文件格式
15         /// </summary>
16         public string AttachExtension { get; set; }
17         /// <summary>
18         /// 图片上传最大值KB
19         /// </summary>
20         public int AttachImagesize { get; set; }
21         #endregion
22     }

 

 

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

 

  

 

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

 

  public class AppConfigurtaionServices
  {
    

    public T GetAppSettings<T>(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<T>(config.GetSection(key))
              .BuildServiceProvider()
              .GetService<IOptions<T>>()
              .Value;

 

      return appconfig;
    }

 

  }  

  

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

 

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

 

 

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

 

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

 

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

 

  我们来测试一下:

  

  

 

 

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

 

 

【无私分享:ASP.NET CORE 项目实战】目录索引

 

简介

 

  我们在 读取配置文件(一) 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         /// <summary>
 6         /// 文件上传路径
 7         /// </summary>
 8         public string FileUpPath { get; set; }
 9         /// <summary>
10         /// 是否启用单用户登录
11         /// </summary>
12         public bool IsSingleLogin { get; set; }
13         /// <summary>
14         /// 允许上传的文件格式
15         /// </summary>
16         public string AttachExtension { get; set; }
17         /// <summary>
18         /// 图片上传最大值KB
19         /// </summary>
20         public int AttachImagesize { get; set; }
21         #endregion
22     }

 

 

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

 

  

 

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

 

  public class AppConfigurtaionServices
  {
    

    public T GetAppSettings<T>(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<T>(config.GetSection(key))
              .BuildServiceProvider()
              .GetService<IOptions<T>>()
              .Value;

 

      return appconfig;
    }

 

  }  

  

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

 

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

 

 

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

 

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

 

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

 

  我们来测试一下:

  

  

 

 

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
asp.netListbox控件用法发布时间:2022-07-10
下一篇:
Asp.net使用JQuery实现评论的无刷新分页及分段延迟加载效果发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap