日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ABP vNext 自动注入,暗藏天坑如斯

發布時間:2023/12/4 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABP vNext 自动注入,暗藏天坑如斯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導言

我們在使用ABP vNext框架時,都知道該框架為我們實現了自動依賴注入(實現自動注入需要在項目里面創建Module類,并且將Module類上的DependsOn到相應的啟動Module類或調用Module類,這步很關鍵)

自動注入示例

只要我們實現如下接口:
ITransientDependency 瞬時生命周期
ISingletonDependency 全局單例生命周期
IScopedDependency 作用域生命周期

public class Test : ITransientDependency {//todo:.... }

天坑如斯

下面講一下巨坑,那就是在自動注入的時候系統會自動推斷要注入的接口,并且是你實現的所有的接口他都會注入也不是放在第一個實現的接口才會注入,而是根據接口的名字來判斷的,比如下面的類就會以接口IUserRepository注入:

public class UserRepository: IUserRepository, ITransientDependency { }

同理下面的類型也會以接口IUserRepository注入:

public class EfCoreUserRepository: IUserRepository, ITransientDependency { }

但是下面這種情況就不能了

public class UserEfCoreRepository: IUserRepository, ITransientDependency { }

源碼

Volo.Abp.DependencyInjection.ExposeServicesAttribute.cs

private static List<Type> GetDefaultServices(Type type) {var serviceTypes = new List<Type>();foreach (var interfaceType in type.GetTypeInfo().GetInterfaces()){var interfaceName = interfaceType.Name;if (interfaceName.StartsWith("I")){interfaceName = interfaceName.Right(interfaceName.Length - 1);}if (type.Name.EndsWith(interfaceName)){serviceTypes.Add(interfaceType);}}return serviceTypes; }

結論

能看出,推斷方法是去掉接口名的“I”之后看這個類名是否是這個字符串結尾,如果是則注入,如果不是則不注入,并且將會遞歸他所有實現的接口,如果有多個接口都滿足條件,則將會以這些接口進行注入。
還有一點就是實現了這三個自動依賴注入的接口的類型的,都將會以自身類型注入到容器

總結

以上是生活随笔為你收集整理的ABP vNext 自动注入,暗藏天坑如斯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。