.Net Core3.0入门学习

.net core启动顺序

  1. ConfigureWebHostDefaults 注册应用需要的组件(容器,配置)
  2. ConfigureHostConfiguration 注册应用启动时的组件(监听的端口)可嵌入自己的组件
  3. ConfigureAppConfiguration 嵌入自己的配置文件
  4. ConfiguraService
  5. Startup
  6. ConfigureService 以上三个都是在应用中注册自己的组件
  7. Configure 注入中间件的过程,处理HTTPContext的整个过程

program.cs 类

替换Startup启动类:

Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
     {
         Console.WriteLine("ConfigureWebHostDefaults");
         //webBuilder.UseStartup<Startup>();
          webBuilder.Configure(app => {
         //Startup的Configrue
        });
        webBuilder.ConfigureServices(server =>
        {
        //StartUp的方法
        });
    }) 

依赖注入(IOC)

接口实现分离模式

抽象包只包含他的方法,实现包只包含方法的实现
组件只需要依赖抽象包,在使用时注入即可,可以在使用时决定实现类是哪一个

核心类型

IServiceConllection 注册整个服务
ServiceDescriptor 服务注册时的信息
IServiceProvider 具体的容器IServiceConllectionbuild出来的
IServiceScope 一个容器子容器的生命周期

容器的生命周期

Singleton 单例 在不同请求或同一请求下的所有访问实现类都是唯一的 (根容器下唯一)
Scoped 作用域 在不同请求下实现类不唯一,在同一请求下的所有访问实现类唯一
Transient 瞬时 每次请求都会获得一个新的对象

依赖注入方法

services.AddSingleton<Interface,impl>
services.AddScoped<Interface,impl>
services.AddTransient<Interface,impl>
这三种方式是常规的注入实现类


service.TryAddSingleton<Interface,impl>
尝试注入,只有不存在该类型的实例时才注册


services.Replace(ServiceDescriptor.Singleton<Interface, impl>())
替换该类的实例


services.RemoveAll()

移除该类下的所有实例

依赖注入实例的获取

  1. Controller构造方法获取实例 如果该实例应用广泛,推荐
  2. [FromService]获取 如果该实例适用范围小,推荐

作用域和对象释放行为

作用域

IServiceScope
实现IDisposable接口的类,DI会负责管理其生命周期,对象使用完毕后,会释放对象

注意事项
  1. 在根容器不要获取IDisposable的瞬时服务
  2. 避免手动创建IDisposable对象的实现,应该使用容器来管理其生命周期(创建与释放)
  3. 单例模式的服务都是注册在根容器HttpContext.RequestServices.CreateScope()

第三方依赖注入组件

使用场景

  1. 当一个服务注册多次,用别名区分
    builder.RegisterType<MyServerV2>().Named<IMyServer>("service2");
  2. 把服务注册到类的属性里
    builder.RegisterType<MyServerV2>().As<IMyServer>().PropertiesAutowired();
  3. 动态代理:当我们在服务中注入额外的能力的时候
  4. 一些特殊的子容器
  5. 常规注册
    builder.RegisterType<MyServer>().As<IMyServer>()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值