国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

楊中科 .netcore 依賴注入

這篇具有很好參考價值的文章主要介紹了楊中科 .netcore 依賴注入。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.概念

概念

生活中的“控制反轉(zhuǎn)”:自己發(fā)電和用電網(wǎng)的電。
依賴注入(Dependency Injection,Dl)是控制反轉(zhuǎn):(Inversion of Control,l0c)思想的實現(xiàn)方式。
依賴注入簡化模塊的組裝過程,降低模塊之間的耦合度

自己發(fā)電的代碼

var connSettings =ConfigurationManager.ConnectionStrings["connstr1"];
string connStr= connsettings.ConnectionString;
SqlConnection conn = new SqlConnection(connstr);

缺點是?
你需要對一切流程很清楚。

代碼控制反轉(zhuǎn)的目的

'怎樣創(chuàng)建XX對象”---->“我要XX對象

兩種實現(xiàn)方式:
1)服務定位器(ServiceLocator);
2)依賴注入(Dependency Injection,Dl);

暢想Demo

服務定位器
IDbConnection conn=ServiceLocator.GetService();

依賴注入

class Demo
{
	// 創(chuàng)建對象之后,框架自動為他賦值
	public lDbConnection Conn { get; set; }
	public void insertDB()
	{
		IDbCommand cmd= Conn.CreateCommand();
	}
	
}

第二部分 依賴注入

DI幾個概念

服務(service):對象;
注冊服務:服務容器:負責管理注冊的服務;
查詢服務:創(chuàng)建對象及關(guān)聯(lián)對象;
對象生命周期:Transient(瞬態(tài),每次獲取都是一個新的對象);scoped(范圍,在這個范圍之內(nèi),每次都是同一個對象);singleton(單例,無論誰獲取這個服務,都是同一個對象);

.NET 中使用DI

1、測試代碼見備注
2、根據(jù)類型來獲取和注冊服務可以分別指定服務類型(servicetype)和實現(xiàn)類型(implementationtype)。這兩者可能相同,也可能不同。服務類型可以是類,也可以是接口建議面向接口編程,更靈活。
3、.NET控制反轉(zhuǎn)組件取名為DependencyInjection但它包含ServiceLocator的功能。

功能測試類

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
調(diào)用:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
運行結(jié)果:

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

.NET 中使用DI 2

1、Install-Package Microsoft.Extensions.DependencyInjection
2、using Microsoft.Extensions.DependencyInjection
3、ServiceCollection用來構(gòu)造容器對象IServiceProvider。調(diào)用ServiceCollection的BuildserviceProvider()創(chuàng)建的ServiceProvider,可以用來獲取BuildserviceProvider()之前Servicecollection中的對象。示例代碼見備注。

示例

1.安裝nuget 包
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

2、引入包

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

3、構(gòu)造容器對象
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
目前看起來 沒有任何意義
一行new 就搞定的代碼!! 寫了八行

第三部分,依賴注入

生命周期

1、給類構(gòu)造函數(shù)中打印,看看不同生命周期的對象創(chuàng)建使用serviceProvider.CreateScope()創(chuàng)建Scope.
2、如果一個類實現(xiàn)了IDisposable接口,則離開作用域之后容器會自動調(diào)用對象的Dispose方法,
3、不要在長生命周期的對象中引用比它短的生命周期的對象。在ASP.NET Core中,這樣做默認會拋異常。
4、生命周期的選擇:如果類無狀態(tài),建議為singleton;如果類有狀態(tài),且有Scope控制,建議為Scoped,因為通常這種Scope控制下的代碼都是運行在同一個線程中的,沒有并發(fā)修改的問題;在使用Transient的時候要謹慎。
5、.NET注冊服務的重載方法很多,看著文檔琢磨吧

測試生命周期

AddTransient 模式

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

測試2
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

證明,每次調(diào)用GetService 都會返回一個新的對象

AddSingleton 模式

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

AddScope模式

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
表明為同一個對象

再次創(chuàng)建一個Scope

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

不同Scope 中 進行對比

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
不同范圍內(nèi)拿到的對象不是同一個

沒有成員變量 ,沒有屬性 :無狀態(tài)類。 建議為Singleton,單線程不考慮并發(fā)問題。

如果類有狀態(tài),且有Scope控制,建議為Scope,通常Scope 控制的代碼。都是運行在同一個線程內(nèi)的。

Transient 需要謹慎,比較耗費內(nèi)存

服務定位器

其他注冊方法:

服務類型和實現(xiàn)類型不一致的注冊
簡單看看其他Add*方法

方式一

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

方式二
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

結(jié)果完全相同

單例方式:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

IServiceProvider的服務定位器方法:

T GetService()如果獲取不到對象,則返回null。
object GetService(Type serviceType)
T GetRequiredservice()如果獲取不到對象,則拋異常
object GetRequiredservice(Type serviceType)
lEnumerableGetServices()適用于可能有很多滿足條件的服務
lEnumerableGetServices(Type serviceType)

示例:
T GetService()

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
object GetService(Type serviceType)
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

object GetRequiredservice(Type serviceType)
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
lEnumerableGetServices()
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
目前來說只有一個
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

改為實現(xiàn)類:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

未滿足,結(jié)果為空
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
注冊多個服務
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
因為還有另外一個實現(xiàn)類:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
運行
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
此時兩個服務都將打印

注冊多個服務后,再打印結(jié)果會發(fā)生什么情況呢
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
此時是以最后一個為準
使用getrequiredService 也是相同結(jié)果

第四部分

DI魅力漸顯:依賴注入

1、依賴注入是有“傳染性”的,如果一個類的對象是通過DI創(chuàng)建的,那么這個類的構(gòu)造函數(shù)中聲明的所有服務類型的參數(shù)都會被DI賦值;但是如果一個對象是程序員手動創(chuàng)建的,那么這個對象就和DI沒有關(guān)系,它的構(gòu)造函數(shù)中聲明的服務類型參數(shù)就不會被自動賦值。
2、.NET的DI默認是構(gòu)造函數(shù)注入。
3、舉例:編寫一個類,連接數(shù)據(jù)庫做插入操作,并且記錄日志(模擬的輸出),把Dao、日志都放入單獨的服務類。connstr見備注。

新建項目,演示依賴注入的“傳染性”
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
裝包
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

編寫代碼
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
controller方法中 中使用
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
調(diào)用
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
好處,當我們更改實現(xiàn)類時,不需要更改代碼
新增從數(shù)據(jù)庫讀取配置

楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#
此時只需要更改代碼配置
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

降低模塊之間的耦合
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#

運行結(jié)果:
楊中科 .netcore 依賴注入,ASP.NET,.netcore,c#文章來源地址http://www.zghlxwxcb.cn/news/detail-831413.html

到了這里,關(guān)于楊中科 .netcore 依賴注入的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【NetCore】03-依賴注入

    管理類之間的依賴,幫助我們在構(gòu)建應用時遵循設計原則,確保代碼的可維護性和可擴展性 依賴注入框架提供了對象創(chuàng)建和生命周期管理的核心能力,各個組件相互協(xié)作,也是由依賴注入框架的能力來實現(xiàn)的 組件包 Microsoft.Extensions.DependencyInjection.Abstractions Microsoft.Extensions.

    2024年02月15日
    瀏覽(18)
  • netCore使用依賴注入

    依賴注入是一種常用的設計模式,用于解耦組件之間的依賴關(guān)系。通過依賴注入,我們可以將一個組件所依賴的其他組件的創(chuàng)建和管理工作交給容器來完成,從而實現(xiàn)組件之間的解耦和靈活性 .NET Core提供了內(nèi)置的依賴注入容器,使我們能夠輕松地實現(xiàn)依賴注入。下面是使用依

    2024年02月16日
    瀏覽(23)
  • .netcore grpc客戶端工廠及依賴注入使用

    .netcore grpc客戶端工廠及依賴注入使用

    gRPC 與? HttpClientFactory ?的集成提供了一種創(chuàng)建 gRPC 客戶端的集中方式。 可以通過依賴包Grpc.Net.ClientFactory中的AddGrpcClient進行g(shù)RPC客戶端依賴注入 AddGrpcClient函數(shù)提供了許多配置項用于處理一些其他事項;例如AOP、重試策略等 創(chuàng)建一個WPF客戶端 在App.xaml.cs代碼類里重寫OnStartup方

    2024年02月12日
    瀏覽(18)
  • 楊中科 ASP.NET DI綜合案例

    楊中科 ASP.NET DI綜合案例

    1、目的:演示DI的能力; 2、有配置服務、日志服務,然后再開發(fā)一個郵件發(fā)送器服務??梢酝ㄟ^配置服務來從文件、環(huán)境變量、數(shù)據(jù)庫等地方讀取配置,可以通過日志服務來將程序運行過程中的日志信息寫入文件、控制臺、數(shù)據(jù)庫等。 3、說明:案例中開發(fā)了自己的日志、配置等

    2024年02月21日
    瀏覽(23)
  • ASP .net core微服務實戰(zhàn)(楊中科)

    ASP .net core微服務實戰(zhàn)(楊中科)

    背景: 主要是思考下,我們?yōu)槭裁匆梦⒎眨?微服務我現(xiàn)在理解是:提供了我們一種模塊化的手段,一個服務負責一種類型的業(yè)務,是一種面對復雜問題進行拆分的方式,但是也會引入一些中間件,讓本來可能簡單的東西,變的復雜一些,因為:有了拆分就必須有治理。

    2024年01月20日
    瀏覽(15)
  • 楊中科 ASP.NET Core前后端分離開發(fā)

    楊中科 ASP.NET Core前后端分離開發(fā)

    前后端分離 1、傳統(tǒng)MVC開發(fā)模式: 前后端的代碼被放到同一個項目中,前端人員負責編寫頁面的模板,而后端開發(fā)人員負責編寫控制器和模型的代碼并且“套模板”。 缺點: 互相依賴, 耦合性強,責任劃分不清 。 2、主流的“前后端分離”: 前端開發(fā)人員和后端開發(fā)人員分別負

    2024年01月23日
    瀏覽(18)
  • .NET Core 依賴注入

    在.NET Core中,依賴注入(Dependency Injection,簡稱DI)是框架的一個重要特性,可以幫助我們解耦代碼、管理對象生命周期以及提高可測試性等.一下是.NET Core中依賴注入的一些基本概念和用法: 1、服務(Service):在DI中,服務即一個對象或者類型。用于完成特定的功能.例如,數(shù)據(jù)庫訪

    2023年04月24日
    瀏覽(94)
  • .NET使用依賴注入,控制反轉(zhuǎn)

    .NET 支持依賴項注入 (DI) 軟件設計模式,這是一種在類及其依賴項之間實現(xiàn) 控制 (IoC) 的反轉(zhuǎn) 的技術(shù) 避免有狀態(tài)的、靜態(tài)類和成員。 通過將應用設計為改用單一實例服務,避免創(chuàng)建全局狀態(tài)。 避免在服務中直接實例化依賴類。 直接實例化會將代碼耦合到特定實現(xiàn)。 不在服務

    2023年04月16日
    瀏覽(28)
  • .NET 通過源碼深究依賴注入原理

    .NET 通過源碼深究依賴注入原理

    依賴注入 (DI) 是.NET中一個非常重要的軟件設計模式,它可以幫助我們更好地管理和組織組件,提高代碼的可讀性,擴展性和可測試性。在日常工作中,我們一定遇見過這些問題或者疑惑。 Singleton服務為什么不能依賴Scoped服務? 多個構(gòu)造函數(shù)的選擇機制? 源碼是如何識別循環(huán)

    2024年02月05日
    瀏覽(30)
  • .Net依賴注入神器Scrutor(上)

    從.Net Core 開始,.Net 平臺內(nèi)置了一個輕量,易用的 IOC 的框架,供我們在應用程序中使用,社區(qū)內(nèi)還有很多強大的第三方的依賴注入框架如: Autofac DryIOC Grace LightInject Lamar Stashbox Simple Injector 內(nèi)置的依賴注入容器基本可以滿足大多數(shù)應用的需求,除非你需要的特定功能不受它支

    2024年03月19日
    瀏覽(42)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包