.net 依赖注入 基本原理学习
实例化带参数类
如果一个类,在初始化时需要带一个参数,则在注册时使用AddScoped
、AddTransient
、AddSingleton
的回调函数。
services.AddScoped<IConfigService>(s=>new TxtConfigServer() { FileName = "mail.ini"});
使用扩展方法注册
在注册时需要使用AddScoped
、AddTransient
、AddSingleton
这三个方法来注册,如果一个功能需要注册很多个服务,则对调用者来说是一件很麻烦的事情,其中有一个服务未注册则会导致失败。
这时候如果可以把这些服务封装成一个方法,调用者直接.Add
,不需要关心都注册哪些服务,就会很方便。
这种行为可以用扩展方法来实现。
1. 首先创建一个静态类,将静态类的命名空间改为Microsoft.Extensions.DependencyInjection
,然后创建一个静态方法,扩展ServiceCollection
类
namespace Microsoft.Extensions.DependencyInjection
{
public static class TxtConfigServerRegister
{
// 调用者需要传入 fileName参数
public static void AddTxtConfig(this ServiceCollection services,string fileName)
{
services.AddScoped<IConfigService>(s=>new TxtConfigServer() { FileName = fileName });
}
}
}
2. 调用者直接.AddTxtConfig
即可注册服务
ServiceCollection services = new ServiceCollection();
services.AddTxtConfig("mail.ini");
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界