其他分享
首页 > 其他分享> > Microsoft.Extensions.DependencyInjection依赖注入

Microsoft.Extensions.DependencyInjection依赖注入

作者:互联网

为什么要使用依赖注入

轻松管理类之间的依赖,构建应用时遵循设计原则。确保代码的可维护性和可扩展性。
依赖注入提供了对象创建和生命周期管理的核心能力

具体运用的组件:

接口实现分离模式,抽象包只需要声明,具体包包括具体的实现。意味着我们的组件只需要依赖它的抽象接口,不需要依赖实现。当使用时注入它的具体实现即可。
好处:以后可以任务修改具体实现的内容,不需要更改代码里面的引用逻辑代码。

依赖注入的核心类型

IserviceCollection:负责服务的注册
ServiceDescriptor:每个服务注册时的信息
IserviceProvider:具体的容器,也是由servicecollection build出来的
IserviceScope:表示一个容器的子容器的生命周期
    ######生命周期
    #######单例singleton:整个生命周期都是一致的
    #######作用域 scoped:容器的生存周期内是一致的,二次请求会更新
    #######瞬间 Transient:每次从容器获取对象时都是一个全新的对象

测试声明周期 附代码

先创建不同的生命周期的三个接口和三个类

namespace HostWebDetail
{
    //声明三个接口 测试生命周期 分别为单例,作用域,瞬间
    public interface IMySingletonService
    {
    }
    public interface IMyScopedService
    {
    }
    public interface IMyTransientService
    {
    }

    //声明方法 继承接口
    public class MySingletonService: IMySingletonService
    {
    }
    public class MyScopedService: IMyScopedService
    {
    }
    public class MyTransientService: IMyTransientService
    {
    }
}

然后在startup中依赖注入

      public void ConfigureServices(IServiceCollection services)
        {
            #region 注册服务不同生命周期的服务
            services.AddSingleton<IMySingletonService, MySingletonService>();
            services.AddScoped<IMyScopedService, MyScopedService>();
            services.AddTransient<IMyTransientService, MyTransientService>();
            #endregion
         }

然后在控制器中实现

  [Route("ServiceLifetime")]
        [HttpGet]
        //FromServices从容器里获取我们的对象
        //每个对象输出两次 对比它的变化
        public List<string> GetServiceLifetime(
    [FromServices] IMySingletonService singleton1,
    [FromServices] IMySingletonService singleton2,
    [FromServices] IMyScopedService scoped1,
    [FromServices] IMyScopedService scoped2,
    [FromServices] IMyTransientService transient1,
    [FromServices] IMyTransientService transient2)
        {
            var s = new List<string>();
            s.Add($"singleton1:{singleton1.GetHashCode()}");
            s.Add($"singleton2:{singleton2.GetHashCode()}");
            s.Add($"scoped1:{scoped1.GetHashCode()}");
            s.Add($"scoped2:{scoped2.GetHashCode()}");
            s.Add($"transient1:{transient1.GetHashCode()}");
            s.Add($"transient2:{transient2.GetHashCode()}");
            return s;
        }

执行效果

标签:生命周期,public,Add,依赖,Extensions,GetHashCode,DependencyInjection,FromServices,Micro
来源: https://www.cnblogs.com/yunnn/p/15960022.html