【NetCore】03-依赖注入

依赖注入框架

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<接口类型,实现>()); ⇒ 相同类型的服务接口,如果实现是不同的,则可以注册,如果实现类是相同的就不注册

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]方式注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NetCore依赖注入是指.NET Core框架提供的一种轻量级和高效的依赖注入机制。依赖注入是一种设计模式,用于实现对象之间的解耦和松耦合。在.Net Core中,依赖注入主要是通过IServiceCollection和IServiceProvider两个核心类来实现的。 首先,我们需要在Startup.cs文件的ConfigureServices方法中注册依赖关系。通过调用IServiceCollection的AddTransient、AddScoped或AddSingleton方法,我们可以将接口和具体实现类型进行关联。这些方法分别表示瞬态注入、作用域注入和单例注入。 然后,在应用程序的其他地方,我们可以通过构造函数参数、属性或方法参数的方式,将依赖对象注入到需要的地方。这些对象会由.Net Core框架自动创建和管理。 依赖注入的好处是,它可以减少代码的耦合性,使得代码更加灵活和可维护。通过将依赖对象的创建和管理交给框架,我们可以专注于业务逻辑的实现,而不需要关心对象的创建细节。同时,依赖注入也方便了单元测试的编写,我们可以轻松地替换依赖对象,进行测试和验证。 另外,依赖注入还可以提高代码的可测试性和可扩展性。通过面向接口编程,我们可以很容易地替换具体实现,实现代码的扩展和重用。 总而言之,NetCore依赖注入是一种非常有用的机制,它可以帮助我们开发更加灵活、可维护和可测试的应用程序。它提供了一种简单而强大的方式来管理和解耦各个对象之间的依赖关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值