依賴注入框架
1.為什么要是使用依賴注入框架
- 管理類之間的依賴,幫助我們在構(gòu)建應(yīng)用時遵循設(shè)計原則,確保代碼的可維護性和可擴展性
- 依賴注入框架提供了對象創(chuàng)建和生命周期管理的核心能力,各個組件相互協(xié)作,也是由依賴注入框架的能力來實現(xiàn)的
組件包
- Microsoft.Extensions.DependencyInjection.Abstractions
- Microsoft.Extensions.DependencyInjection
依賴注入框架核心類型
1.IServiceCollection --> 負責(zé)服務(wù)注冊
2.ServiceDescription --> 每個服務(wù)注冊時的信息
3.IServiceProvider --> 容器
4.IServiceScope --> 子容器生命周期
1.1 生命周期(ServiceLifeTime)
- 單例 Singleton --> 在根容器生命周期內(nèi)都是單例
- 作用于 Scoped --> 在子容器的生存周期內(nèi)使用的是同一對象,如果容器被釋放,則對象也被釋放
- 瞬時(暫時) Transient --> 每一次從容器中獲取對象時,都能獲取到一個全新的對象
1.2 服務(wù)注冊方式
1.servcies.AddScope<接口類型,實現(xiàn)>();
2.services.AddScope<接口類型>(new Tdata()); ? 花式注冊
3.services.AddScope<接口類型>(serviceProvider=>{return new 實現(xiàn)()}); ? 工廠模式
4.services.TryAddSingleton<接口類型,實現(xiàn)>(); ? 嘗試注冊,已經(jīng)注冊過的就不會再注冊了,服務(wù)類型是接口類型,如果已經(jīng)存在相同接口類型,則不注冊
5.services.TryAddEnumerable(ServiceDescriptor.Singleton<接口類型,實現(xiàn)>()); ? 相同類型的服務(wù)接口,如果實現(xiàn)是不同的,則可以注冊,如果實現(xiàn)類是相同的就不注冊文章來源:http://www.zghlxwxcb.cn/news/detail-605502.html
1.3 服務(wù)移除、替換
- 移除:services.RemoveAll<接口類型>(); ? 移除所有的當(dāng)前注冊接口類型的服務(wù)
- 替換: services.Replace(ServiceDescriptor.Singleton<接口類型,實現(xiàn)>);
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;
}
}
服務(wù)注冊時,如果是大部分接口都需要使用時,采用構(gòu)造函數(shù)注入的方式,
如果僅個別方法使用,采用[FromServices]方式注入文章來源地址http://www.zghlxwxcb.cn/news/detail-605502.html
到了這里,關(guān)于【NetCore】03-依賴注入的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!