.NET Core 开发实战
肖伟宇
校宝在线架构师、SkyWalking .NET 探针贡献者、NetCorePal 组件库创建者
20086 人已学习
新⼈⾸单¥59
课程目录
已完结/共 61 讲
第一章:必备知识 (25讲)
时长 06:28
时长 02:13
.NET Core 开发实战
登录|注册
留言
49
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 05 | 依赖注入:良好架构的起点
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 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(49)

  • 最新
  • 精选
小安
老师,Singleton、Scoped、Transient 的应用情景有哪些,能大概说下吗,谢谢

作者回复: 对于方法都是线程安全的类型,一般使用单例。 对于对象依赖了处理上下文,或者使用了有限资源(如数据库连接),一般使用Scoped或者Transient。 Scoped、Transient的区别是你在同一个上下文中是否期望使用同一个实例,如果是,用Scoped,反之则使用Transient

2020-02-12
10
高喜庆
工厂方法注入,有什么优点吗?在什么情景下使用呢?

作者回复: 工厂模式可以让你自由控制构造对象的过程,例如当你构造实例的过程比较复杂,需要特别的逻辑处理或组装时。 另外一个场景是当你已经有了一个对象的实例、或者容器中已经有了某个对象,这个对象实现了多个接口或基类,你需要注册这几个接口为同一实例时,也可以用工厂。

2020-02-14
3
5
墨墨墨墨小宇
Scope 这个生命周期,有使用场景吗?感觉平时没有用到的地方哎

作者回复: 例如管理数据库连接对象,每个用户请求范围内,使用同一个实例,处理响应完毕,由容器帮忙释放

2020-01-22
2
4
Mr.Beethoven
services.AddScoped<IOrderService, OrderService>(); services.AddScoped<IOrderService, OrderServiceEX>(); 注册的时候注册了2个接口实例 使用的时候 默认是用的最后注册的,怎么选择前面的,需要写遍历判断吗,有api能直接选择吗

作者回复: 需要遍历,根据实际类型来判断。 如果特别需要对同一服务注册不同的类型并加以区分的话,可以使用第三方的依赖注入框架,支持命名注册

2020-01-14
4
这个依赖注入为什么不用配置文件?

作者回复: 实际场景中,线上环境通过修改配置来切换依赖注入的方式比较少见,一般依赖修改还涉及到包的依赖和回归测试,因此用配置文件没有明显优势。

2020-02-04
3
3
wdls
如果我不使用tryadd , 我重复注册了相应的服务, 那会有什么后果?

作者回复: 服务会被多次注册,GetServce获取服务时,会得到最后注册的那个,使用GetServces会得到所有注册的,与你注册顺序相同

2020-01-25
2
Larry
想请教一个 微服务的问题,两个组需要api 。分析得出结论 他们需要的内容差不多 ,只是一个组需要的比另一个组字段多!想问一下,是设计一个字段!以后通过权限控制吗?还是就设计两个API!谢谢🙏

作者回复: 从你的描述来看,你需要确定这两个需求是否是不同角色的诉求,或者是否是在解决不同的问题。 如果是,则分别设计API。 如果不是,说明两个业务诉求的目的是一致的,应该用一个接口可以满足。 不建议通过字段当作权限来判断不同的逻辑,这样会把两个不同的需求,耦合在一个API中。

2020-01-20
3
2

这种依赖注入 如何使用在控制台应用程序中呢。

作者回复: 类似下面的代码,后面的章节有提到 IServiceCollection serviceCollection = new ServiceCollection(); //创建容器注册集合 IServiceProvider service = serviceCollection.BuildServiceProvider(); //构建容器

2020-01-17
2
harry
😀希望有对基础知识的补充,之前零散学过,会一些,但是看着还是有的懵……

作者回复: 推荐阅读一下官方文档https://docs.microsoft.com/zh-cn/

2020-01-15
2
2
和你一起搬砖的胡大爷
老师,有没有实现类似spring componentscan 自动组装实例的dotnet实现?

作者回复: Autofac 提供了 RegisterAssemblyTypes 能力可以实现类似的能力

2020-01-15
2
收起评论