zoukankan      html  css  js  c++  java
  • 1.依赖注入-服务注册、移除、替换

    一、组件包

    Microsoft.Extensions.DependencyInjection.Abstractions
    Microsoft.Extensions.DependencyInjection
     
    二、核心类型
    IServiceCollection
    ServiceDescriptor
    IServiceProvider
    IServiceScope
     
    三、生命周期:ServiceLifetime
    单例 Singleton
    作用域 Scoped:每次请求作用域是不同的,同一请求内是同一个对象
    瞬时(暂时) Transient
     
    四、服务注册、移除、替换
    1、注册服务不同生命周期的服务
                services.AddSingleton<IMySingletonService, MySingletonService>();
                services.AddScoped<IMyScopedService, MyScopedService>();
                services.AddTransient<IMyTransientService, MyTransientService>();

    2、花式注册

                services.AddSingleton<IOrderService>(new OrderService());  //直接注入实例
                services.AddSingleton<IOrderService, OrderServiceEx>();
                services.AddSingleton<IOrderService>(serviceProvider =>
                {
                    return new OrderServiceEx();
                });

    3、尝试注册

                services.TryAddSingleton<IOrderService, OrderServiceEx>();//如果服务中已注册IOrderService接口就不注册,以接口作区分。 
                services.TryAddEnumerable(ServiceDescriptor.Singleton<IOrderService, OrderServiceEx>());//如果服务中已注册相同的实现类就不注册,不同的实现类就注册,已实现类作区分。

    4、注册泛型模板

    services.AddSingleton(typeof(IGenericService<>), typeof(GenericService<>));

    5、移除和替换注册

                services.Replace(ServiceDescriptor.Singleton<IOrderService, OrderServiceEx>());
                services.RemoveAll<IOrderService>();

    五、依赖对象的获取

    1、构造函数方式

            public WeatherForecastController(ILogger<WeatherForecastController> logger, IOrderService orderService, IGenericService<IOrderService> genericService)
            {
                _orderService = orderService;
                _logger = logger;
            }

    2、控制器方式

            public int GetService([FromServices]IMySingletonService singleton1)
            {return 1;
            }
            //FromServices]IEnumerable<IOrderService> services //从服务中获取所有注入过IOrderService的对象
         public int GetServiceList([FromServices]IEnumerable<IOrderService> services) { foreach (var item in services) { Console.WriteLine($"获取到服务实例:{item.ToString()}:{item.GetHashCode()}"); } return 1; }

    3、服务方式

    var obj= HttpContext.RequestServices.GetService(typeof(IOrderService));
  • 相关阅读:
    华为精益敏捷专家:DevOps转型中的那些坑
    极致进化-敏捷进化型企业的未来畅想
    DevOps的工程化
    京东精益敏捷教练分享:敏捷助力产品创新!
    敏捷开发进度管理之燃尽图
    手把手教你进行Scrapy中item类的实例化操作
    手把手教你使用ADB卸载手机内置App软件
    手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能
    手把手教你利用Pyecharts库对IP代理数据进行数据可视化分析
    手把手教你使用Python爬取西刺代理数据(下篇)
  • 原文地址:https://www.cnblogs.com/Adoni/p/12649879.html
Copyright © 2011-2022 走看看