.NET Core 开发实战
肖伟宇
校宝在线架构师、SkyWalking .NET 探针贡献者、NetCorePal 组件库创建者
20086 人已学习
新⼈⾸单¥59
课程目录
已完结/共 61 讲
第一章:必备知识 (25讲)
时长 06:28
时长 02:13
.NET Core 开发实战
登录|注册
留言
9
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 15 | 选项框架:服务组件集成配置的最佳实践
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | .NET Core的现状、未来以及环境搭建
04 | Startup:掌握ASP.NET Core的启动过程
05 | 依赖注入:良好架构的起点
06 | 作用域与对象释放行为:你知道IDisposable对象释放的时机和坑吗?
07 | 用Autofac增强容器能力:引入面向切面编程(AOP)的能力
08 | 配置框架:让服务无缝适应各种环境
09 | 命令行配置提供程序:最简单快捷的配置注入方法
10 | 环境变量配置提供程序:容器环境下配置注入的最佳途径
11 | 文件配置提供程序:自由选择配置的格式
12 | 配置变更监听:配置热更新能力的核心
13 | 配置绑定:使用强类型对象承载配置数据
14 | 自定义配置数据源:低成本实现定制化配置方案
15 | 选项框架:服务组件集成配置的最佳实践
16 | 选项数据热更新:让服务感知配置的变化
17 | 为选项数据添加验证:避免错误配置的应用接收用户流量
18 | 日志框架:聊聊记日志的最佳姿势
19 | 日志作用域:解决不同请求之间的日志干扰
20 | 结构化日志组件Serilog:记录对查询分析友好的日志
21 | 中间件:掌控请求处理过程的关键
22 | 异常处理中间件:区分真异常与逻辑异常
23 | 静态文件中间件:前后端分离开发合并部署骚操作
24 | 文件提供程序:让你可以将文件放在任何地方
25 | 路由与终结点:如何规划好你的Web API
26 | 工程结构概览:定义应用分层及依赖关系
27 | 定义Entity:区分领域模型的内在逻辑和外在行为
28 | 工作单元模式(UnitOfWork):管理好你的事务
29 | 定义仓储:使用EF Core实现仓储层
30 | 领域事件:提升业务内聚,实现模块解耦
31 | APIController:定义API的最佳实践
32 | 集成事件:解决跨微服务的最终一致性
33 | 集成事件:使用RabbitMQ来实现EventBus
34 | MediatR:轻松实现命令查询职责分离模式(CQRS)
35 | MediatR:让领域事件处理更加优雅
36 | HttpClientFactory:管理向外请求的最佳实践
37 | gRPC:内部服务间通讯利器
38 | gRPC:用代码生成工具提高生产效率
39 | Polly:用失败重试机制提升服务可用性
40 | Polly:熔断慢请求避免雪崩效应
41 | 网关与BFF:区分场景与职责
42 | 网关与BFF:使用JWT来实现身份认证与授权
43 | 安全:反跨站请求伪造
44 | 安全:防开放重定向攻击
45 | 安全:防跨站脚本
46 | 安全:跨域请求
47 | 缓存:为不同的场景设计合适的缓存策略
48 | 部署:演示一个部署流程
49 | ConfigMap:实现基本配置方案
50 | 配置:使用分布式配置中心方案版本化管理配置
51 | 健康检查:与Liveness、Readiness、Startup探测集成实现高可用
52 | 健康检查:搭建全量健康检查探针和看板
53 | ForwardedHeaders:确保服务在负载均衡下正常工作
54 | 安全:介绍强制HTTPS的两种方式
55 | 日志:与EFK日志三件套集成
56 | 日志:Exceptionless日志系统
57 | 追踪:集成SkyWalking .NET实现追踪
58 | 监控与告警:Prometheus与AlertManager
59 | 监控与告警:用Granfana实现监控看板
60 | prometheus-net:自定义监控指标利器
61 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(9)

  • 最新
  • 精选
Geek_ee4d86
老师好,我想问一下,服务依赖选项框架比起依赖配置框架有什么好处呢?还有选项框架和配置框架的区别,选项框架应用在什么场景?

作者回复: 使用选项框架,仅对服务注入它用到的值。 服务依赖配置框架,意味着它有可能使用配置中的任意值。 服务应该只依赖它使用到的配置或接口

2020-05-23
3
和你一起搬砖的胡大爷
老师我看到现在,老师你讲的,不管是框架,还是ioc概念,就是简陋版的spring boot。我在微软是身不由己,虽然我也在尝试推java,老师你为啥选型有成熟的java不用要选没什么人用的.net呢

作者回复: .NET 没人用的结论是从哪里的出来的 不否认spring boot的设计非常精妙,但ASP.NET Core的设计也是非常体系化和精巧,在kubernetes流行的当下,.NET生态能够很便捷地实现微服务架构,何乐而不为呢。

2020-03-09
7
2
大风
在1:52中的service.AddSingleton<OrderServiceOptions>()单个类的注入?

作者回复: 即服务类型与实现类型是相同的情况,例如一个未实现任何接口的服务

2020-02-28
2
张志炜
/// <summary> /// 应用程序参数,优先级最高:"commandLineArgs": "--OrderService:MaxOrderCount=555" /// 环境变量参数,优先级其次:"OrderService__MaxOrderCount": "666" /// Json文件配置,优先级最低 /// </summary> /// <param name="configuration"></param> public Startup(IConfiguration configuration) { //configuration = SetMemoryCollection(); Configuration = configuration; } private IConfiguration SetMemoryCollection() { IConfigurationBuilder builder = new ConfigurationBuilder(); builder.AddInMemoryCollection(new Dictionary<string, string>() { {"OrderService:MaxOrderCount","218" }, }); return builder.Build(); } 老师,我实际测试中,参数、环境变量、Json文件三个配置的优先级,和你回复另一个同学的,好像不太一样? 我这里看到的是,命令行参数的优先级是最高的,Json文件是最低的。 作者回复: 优先级高到低: 环境变量配置 命令行配置 文件配置 你这里环境变量和命令行配置是不是写反了。 …… 此外,配置是从Startup默认传进来的,如果我要自定义配置的话,应该在哪里传入比较好?目前我想到的是直接将配置变量给替换掉。。。

作者回复: 感谢指正,内置的配置优先级高到低是: 命令行配置 环境变量配置 文件配置 自定义配置建议在Program.cs 使用IHostBuilder的ConfigureAppConfiguration方法

2020-05-16
1
priapus
我发现有一处漏讲了:那就是: public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { Configuration = configuration; } 构造函数的IConfiguration类型参数注入,小白学的话可能懵逼,还好我做过一点... 刚开始我以为 services.Configure<OrderServiceOptions>(Configuration.GetSection("OrderService")); 中的Configuration是NetFramework中的 System.Configuration.ConfigurationManager,感觉不是,再看代码,原来是在Strarup构造函数注入的...

作者回复: 感谢提醒,确实如此,尽量避免使用静态的属性获取配置,这样的代码不利于扩展和测试。 使用注入的方式可以让代码对单元测试优化,也易于重构和扩展。

2020-05-15
1
Zyt_MaoMao
老师 后续有没有项目实战,用一个实际项目把知识点串起来

作者回复: 最后的部分会全部串起来讲,包括部署

2020-03-09
1
雄鹿 @
我发现 IOptions<T> 和 IOptionsMonitor<T> 是一样的,好像并不推荐用 IOptions<T> 了,这两个都是单例的生命周期 但是 IOptionsSnapshot<T> 的生命周期和 AddScoped 的生命周期一样, 但是 IOptionsSnapshot<T> 的 T 实现 IDisposable 以后却没有走 Dispose() 去释放,AddScoped 走了 Dispose() 请问大神不走 Dispose() 不释放不会出现问题吗?还是另有方法释放?

作者回复: IOptions<T> 这里的配置对象一般是POCO类型,不应该是IDisposable的。 另外 IOptions<T> 和IOptionsMonitor<T> 都是单例。 IOptions<T>读取到的值永远不会变。 IOptionsMonitor<T>读取到的值,会是配置变化后的值,也就是会保持是新值。

2020-03-05
1
Sebastian_G
正常有配置的情况下是优先读取配置的下面的吗

作者回复: 优先级高到低: 环境变量配置 命令行配置 文件配置

2020-04-18
小孩
配置框架是单例的吗,选项框架跟配置框架真实业务场景服务读取配置推荐用哪一个
2021-06-06
收起评论