美文网首页
NETCORE依赖注入

NETCORE依赖注入

作者: 醉酒的姑娘 | 来源:发表于2021-04-01 09:05 被阅读0次

依赖注入的组件包:

Microsoft.Extensions.DependencyInjection.Abstractions
Microsoft.Extensions.DependencyInjection

依赖注入框架核心是这两个包,一个抽象包,一个具体的实现,这里用到了一个比较经典的设计模式,接口实现分离模式
抽象包只包含接口的定义,实现包会包含具体的实现,我们的组件只需要依赖他的抽象接口而不需要依赖他的实现,当使用时注入他的具体实现即可
核心类型:
IServiceCollection 负责服务的注册
ServiceDescriptor 每个服务注册时的信息
IServiceProvider 具体的容器,由ServiceCollection Builder出来的
IServiceScope 表示容器的生命周期

生命周期:
单例 Singleton
作用域Scoped
瞬时 Transient

image.png

从请求结果可以看出:
Singleton 整个应用程序内都是一个对象实例
Transient 每次请求都会得到一个新对象实例
Scoped 每个请求内的对象是相同的,不同的请求得到的对象实例是不同的

//在ConfigureServices注入服务

    services.AddSingleton<IMySingletonService, MySingletonService>();
    services.AddScoped<IMyScopedService, MyScopedService>();
    services.AddTransient<IMyTransientService, MyTransientService>();

//在Controller中获取服务
//FromServices 这个标注的作用可以从容器里面获取我的对象
//当注入的服务是大部分接口都需要使用的情况下,推荐的做法是使用构造函数的注入方式
//当服务仅仅是某一个接口使用的情况下,推荐使用FromServices的方式注入
        [HttpGet("GetService")]
        public int GetService([FromServices] IMySingletonService singleton1,
                                  [FromServices] IMySingletonService singleton2,
                                  [FromServices] IMyScopedService scoped1,
                                  [FromServices] IMyScopedService scoped2,
                                  [FromServices] IMyTransientService transient1,
                                  [FromServices] IMyTransientService transient2)
        {

            Console.WriteLine($"singleton1:{singleton1.GetHashCode()}");
            Console.WriteLine($"singleton2:{singleton2.GetHashCode()}");

            Console.WriteLine($"scoped1:{scoped1.GetHashCode()}");
            Console.WriteLine($"scoped2:{scoped2.GetHashCode()}");

            Console.WriteLine($"transient1:{transient1.GetHashCode()}");
            Console.WriteLine($"transient2:{transient2.GetHashCode()}");

            Console.WriteLine($"==============请求结束=============");
            return 1;
        }

            //其他方式注入
            services.AddSingleton<IMySingletonService>(new MySingletonService());//直接注入实例
            services.AddSingleton<IMySingletonService>(serviceProvier =>
            {
                return new MySingletonService();
            });//通过工厂的方式注入
 //注册泛型模板
services.AddSingleton(typeof(IGenericService<>),typeof(GenericService<>));

相关文章

  • NETCORE依赖注入

    依赖注入的组件包: 依赖注入框架核心是这两个包,一个抽象包,一个具体的实现,这里用到了一个比较经典的设计模式,接口...

  • NetCore基于依赖注入的封装

    通常我们新建一个.Net 库项目,最后编译成dll,直接被其它项目引用,或提交到Nuget(包括私有的Nuget服...

  • 开源项目的依赖注入

    开源项目的依赖注入 依赖注入概念 依赖注入(DI:Dependency Injection): 依赖注入方式: B...

  • 资料收集

    依赖注入 AngularJs依赖注入的研究 (已读) 依赖注入(已读)

  • Dagger2常用注解诠释

    依赖注入 控制反转(IoC)与依赖注入(DI)浅谈依赖注入理解依赖注入(IOC)和学习Unity Gradle配置...

  • Day62 Spring 依赖注入源码解析

    手动注入自动注入 依赖注入,set注入,构造注入 依赖注入: Key依据 byType byName constr...

  • Dagger2 源码分析

    Dagger简单介绍 Dagger2涉及到依赖注入,有关依赖注入的请到理解依赖注入 通过注解方式实现依赖注入分为两...

  • 依赖注入(转)

    依赖注入(转) 原文地址:依赖注入原理

  • Spring学习之依赖注入

    Spring学习之依赖注入 依赖注入的基本概念 依赖注入(Dependecy Injection),也称为IoC(...

  • 依赖注入及Dagger2框架简介

    依赖注入简介 在介绍Dagger框架之前我们先来看看依赖注入(Dependence Injection),依赖注入...

网友评论

      本文标题:NETCORE依赖注入

      本文链接:https://www.haomeiwen.com/subject/mreohltx.html