DotNetCore跨平台~在appsettings.json里自定义配置项
DotNetCore里一切都是依赖注入的,对于appsettings这个可扩展的配置对象也不例外,它位于项目根目录,一般在startup里去注册它,在类中通过构造方法注入来获取当前的对象,以便去使用它,当然我们也可以自己去构建和使用它,下面我就来总结一下。
传统方法,startup注入,构造方法使用
1 注意配置类
public class RedisConfiguration { #region 属性成员 /// <summary> /// 文件上传路径 /// </summary> public string Host { get; set; } /// <summary> /// 允许上传的文件格式 /// </summary> public string Password { get; set; } /// <summary> /// 图片上传最大值KB /// </summary> public int IsProxy { get; set; } #endregion }
2 在appsettings里添加它的内容
{ "Logging": { "IncludeScopes": false, "Debug": { "LogLevel": { "Default": "Warning" } }, "Console": { "LogLevel": { "Default": "Warning" } } }, "RedisConfiguration": { "Host": "localhost:6379", "Password": "bobo123#", "IsProxy": "0" } }
3 在控制器里使用它,当然你可以在基类中定义它的使用方式,但注入的入口还是在构造方法上
public class ApiControllerBase : Controller { private readonly IOptions<RedisConfiguration> AppConfiguration; public ApiControllerBase(IOptions<RedisConfiguration> appConfiguration) { AppConfiguration = appConfiguration; } }
这时,你的AppConfiguration在被加载后,就有值了,是在程序运行时被注入进来的!
属性中注入并且使用
appsetting的内容不变,只是在属性中去封装了配置注入与获取的过程,注意,为了考虑性能,你可以把它的建立和获取做成单例,这点我就不设计了!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public RedisConfiguration AppConfigurations { get { var config = new ConfigurationBuilder() .AddInMemoryCollection() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile( "appsettings.json" , optional: true , reloadOnChange: true ) .Build(); var sp = new ServiceCollection().AddOptions().Configure<RedisConfiguration>( config.GetSection( "RedisConfiguration" )).BuildServiceProvider(); var _appConfiguration = sp.GetService<IOptions<RedisConfiguration>>(); return _appConfiguration.Value; } } |
在控制器上,可以直接使用它了,我这个属性是做在所有控制器的父类上的。
[HttpGet] public IEnumerable<string> Get() { return new string[] { AppConfigurations.Host, AppConfigurations.Password, AppConfigurations.IsProxy.ToString() }; }
感谢各位的阅读!
对于.net core的研究我们还在继续,希望core2.0,standard2.0不会让我们失望!
听说它已经实现了.net frameworks 4.6.1所有的功能!
合集:
DotNetCore
分类:
.Net Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2016-08-17 关于Lind.DDD.Api客户端的使用与知识分享
2012-08-17 DDD领域驱动设计(Domain Driven Design)(转)
2012-08-17 分布式中的DTO(转)
2011-08-17 如何把枚举元素的描述输出(不使用反映和扩展方法(3.5才支持呢)