实例化带参数类
如果一个类,在初始化时需要带一个参数,则在注册时使用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");
标签:依赖,AddScoped,调用者,ServiceCollection,基本原理,AddTxtConfig,注册,services,net
From: https://www.cnblogs.com/sunhouzi/p/17860062.html