依赖注入框架
1.为什么要是使用依赖注入框架
- 管理类之间的依赖,帮助我们在构建应用时遵循设计原则,确保代码的可维护性和可扩展性
- 依赖注入框架提供了对象创建和生命周期管理的核心能力,各个组件相互协作,也是由依赖注入框架的能力来实现的
组件包
- Microsoft.Extensions.DependencyInjection.Abstractions
- Microsoft.Extensions.DependencyInjection
依赖注入框架核心类型
1.IServiceCollection --> 负责服务注册
2.ServiceDescription --> 每个服务注册时的信息
3.IServiceProvider --> 容器
4.IServiceScope --> 子容器生命周期
1.1 生命周期(ServiceLifeTime)
- 单例 Singleton --> 在根容器生命周期内都是单例
- 作用于 Scoped --> 在子容器的生存周期内使用的是同一对象,如果容器被释放,则对象也被释放
- 瞬时(暂时) Transient --> 每一次从容器中获取对象时,都能获取到一个全新的对象
1.2 服务注册方式
1.servcies.AddScope<接口类型,实现>();
2.services.AddScope<接口类型>(new Tdata()); ⇒ 花式注册
3.services.AddScope<接口类型>(serviceProvider=>{return new 实现()}); ⇒ 工厂模式
4.services.TryAddSingleton<接口类型,实现>(); ⇒ 尝试注册,已经注册过的就不会再注册了,服务类型是接口类型,如果已经存在相同接口类型,则不注册
5.services.TryAddEnumerable(ServiceDescriptor.Singleton<接口类型,实现>()); ⇒ 相同类型的服务接口,如果实现是不同的,则可以注册,如果实现类是相同的就不注册文章来源:https://www.toymoban.com/news/detail-605502.html
1.3 服务移除、替换
- 移除:services.RemoveAll<接口类型>(); ⇒ 移除所有的当前注册接口类型的服务
- 替换: services.Replace(ServiceDescriptor.Singleton<接口类型,实现>);
1.4 注册泛型模板
- services.AddSingleton(typeof(IGenericService<>),typeof(GenericService<>))
// 泛型类的定义
public interface IGenericService<T>
{
}
public class GenericService<T>:IGenericService<T>
{
public T Data {get; private set;}
public GenericService(T data)
{
this.Data = data;
}
}
服务注册时,如果是大部分接口都需要使用时,采用构造函数注入的方式,
如果仅个别方法使用,采用[FromServices]方式注入文章来源地址https://www.toymoban.com/news/detail-605502.html
到了这里,关于【NetCore】03-依赖注入的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!