DOTNET CORE源碼分析之ServiceDescriptor


  ServiceDescriptor在.net core中的作用就是DI中注入服務元素的描述。每一個元素核心內容部分包括需要注入的服務元素的類型ServiceType,它對應的接口(如果有的話)ImplementationType,以及服務元素的生命周期ServiceLifetime。

  源碼中ServiceDescriptor是一個普通類,一共有4個構造函數,分別是如下:

public ServiceDescriptor(Type serviceType, Type implementationType, ServiceLifetime lifetime): this(serviceType, lifetime)

需要帶入服務元素的類型,服務元素對應接口的類型,服務元素的生命周期。

public ServiceDescriptor(Type serviceType, object instance): this(serviceType, ServiceLifetime.Singleton)

需要帶入服務元素的類型,服務元素實例,默認是單例的。

public ServiceDescriptor(Type serviceType, Func<IServiceProvider, object> factory, ServiceLifetime lifetime): this(serviceType, lifetime)

需要帶入服務元素的類型,服務工廠(用於生成服務實例),服務元素的生命周期。  

private ServiceDescriptor(Type serviceType, ServiceLifetime lifetime)

需要帶入服務元素的類型,服務元素的生命周期,這個是最基本的構造函數,但是沒有賦予實例對象,所以不公開,不然就不知道這個服務的真實值是什么了,也就沒有注入的意義了。

  ServiceDescriptor中有幾個很重要的函數,下面我簡單介紹一下:

  第一個:Describe函數,用於生成ServiceDescriptor類,一共有3個重載,分別是如下:

public static ServiceDescriptor Describe(Type serviceType,Func<IServiceProvider, object> implementationFactory,ServiceLifetime lifetime)

public static ServiceDescriptor Describe(Type serviceType,Type implementationType,ServiceLifetime lifetime)

private static ServiceDescriptor Describe<TService, TImplementation>(ServiceLifetime lifetime)

public static ServiceDescriptor Singleton(Type serviceType,object implementationInstance)

它們分別對應上面的構造函數,也就是說為實例化ServiceDescriptor提供另外一種方式

  第二個:Singleton函數,用於生成單例化的ServiceDescriptor類,重載方式不另外說明。

  第三個:Scoped函數,用於生成服務范圍內的ServiceDescriptor類,重載方式不另外說明。

  第四個:Transient函數,用於生成每次不同的ServiceDescriptor類,重載方式不另外說明。

  另外,ServiceLifetime 是一個枚舉類型,枚舉內容有Singleton,Scoped,Transient。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM