.net 依赖注入 基本原理学习

实例化带参数类

如果一个类,在初始化时需要带一个参数,则在注册时使用AddScopedAddTransientAddSingleton的回调函数。

services.AddScoped<IConfigService>(s=>new TxtConfigServer() { FileName = "mail.ini"});

使用扩展方法注册

在注册时需要使用AddScopedAddTransientAddSingleton这三个方法来注册,如果一个功能需要注册很多个服务,则对调用者来说是一件很麻烦的事情,其中有一个服务未注册则会导致失败。
这时候如果可以把这些服务封装成一个方法,调用者直接.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");
posted @ 2023-11-27 18:17  Simian_2018_12_22  阅读(24)  评论(0编辑  收藏  举报