NetCore 依赖注入

  .AddTransient<IFoo, Foo>() // //ImplementationType  根据类型 
  .AddScoped<IBar>(_ => new Bar())//ImplementationFactory 通过工厂创建
  .AddSingleton<IBaz>(new Baz());//ImplementationInstance 实现实例

添加对象注册并注册不同作用域,并遍历注册到容器内。

1  ImplementationFactory 通过工厂创建, 创建 一个基于容器的委托 service.ImplementationFactory(provider),,最后根据这个委托实现IServiceProvider 接口来执行 new Bar()  来创建对象

2 ImplementationType  根据类型     创建基于容器的委托, Func<Cat, Type[], object?> factory = (c, arguments) => Create(c, to, arguments);最后传入参数调用这个委托来创建对象

3 ImplementationInstance 实现实例  这里创建一个委托  Func<Cat, Type[], object?> factory = (_, arguments) => instance; 直接调用对象来创建


4 创建好委托后会会将委托,生命周期等信息写入 ServiceRegistry 服务注册类,并添加到容器的字典集合里
type为键,最后创建返回容器。
(创建容器后这里注册一个委托,写入 ServiceRegistry 服务注册类,用来创建范围工厂和生成子容器
_cat.Register<IServiceScopeFactory>(c => new ServiceScopeFactory(c.CreateChild()), Lifetime.Transient);//创建子容器,创建范围工厂,就是生命周期)


5 创建范围。通过容器来执行刚刚的 生成容器是注册的委托,创建子容器,就是在容器里有创建了一个容器

6 获取服务创建对象,通过执行前面容器里的注册的委托。根据不同注册方式来进行不同的对象创建,
创建对象后会把创建对象保存,用于后续释放对象

  

posted @ 2024-03-10 16:43  孤海飞雁  阅读(11)  评论(0编辑  收藏  举报