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

.Net6.0系列-7 依賴注入(一)

這篇具有很好參考價(jià)值的文章主要介紹了.Net6.0系列-7 依賴注入(一)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

依賴注入(Dependency Injection,DI)是控制反轉(zhuǎn)(Inversion of Control,IOC)思想的實(shí)現(xiàn)方式,依賴注入簡化模塊的組裝過程,降低模塊之間的耦合度.
DI的幾個(gè)概念:
服務(wù)(Service):和框架請求之后返回的一個(gè)對象,可以是一個(gè)數(shù)據(jù)庫鏈接,也可以是一個(gè)文件處理的方法,或者是數(shù)據(jù)處理的一個(gè)過程方法
注冊服務(wù):將上面向框架要的這個(gè)服務(wù)先注冊,才能向框架請求
服務(wù)容器:負(fù)責(zé)管理注冊的服務(wù)
查詢服務(wù):創(chuàng)建對象及關(guān)聯(lián)對象
對象生命周期有三種:
(1)Transient(瞬態(tài)):獲取服務(wù)對象每次獲取都是一個(gè)新的對象
(2)Scoped(范圍):在特定范圍內(nèi)再次獲取為同一個(gè)對象
(3)Singleton(單例):就這一個(gè)對象,每次獲取都是他
如果一個(gè)類實(shí)現(xiàn)了IDisposable接口,則離開作用域后容器會自動調(diào)用對象的Dispose方法,參考Using
生命周期的選擇:如果類無狀態(tài),建議選為Singleton,如果類中有狀態(tài)且有Scope控制就使用Scoped

.Net中使用DI
1.根據(jù)類型來獲取和注冊服務(wù):
可以分別指定服務(wù)類型和實(shí)現(xiàn)類型.這兩者可能相同,也可能不同.服務(wù)類型可以是類,也可以是接口,一般面向接口編程更靈活
2…Net控制反轉(zhuǎn)組件取名為DependencyInjection,但是包含ServiceLocator的功能
3.ServiceCollection用來構(gòu)造容器對象IServiceProvider,調(diào)用ServiceCollection的BuliderServiceProvider()創(chuàng)建ServiceProvider,可以用來獲取BuliderServiceProvider()之前ServiceCollection中的對象
安裝包需求:
Install-Package Microsoft.Extensions.DependencyInjection
using Microsoft.Extensions.DependencyInjection

GetService是根據(jù)注冊對象來返回的
GetRequiredService:沒有服務(wù)就拋出異常,因?yàn)閞equired是必須有服務(wù),當(dāng)有多個(gè)服務(wù)的時(shí)候獲取的是最后一個(gè)服務(wù)
GetServices:獲取注冊的所有的服務(wù),

public interface ITestService
{
	public string Name{get;set;}
	public void SayHi();
}

public class TestServiceImpl:ItestService
{
	public string Name{get;set;}
	public void SayHi()
	{
		Console.WriteLine($"Hi,I'm{Name}");
	}
}
public class TestServiceImpl2:ItestService
{
	public string Name{get;set;}
	public void SayHi()
	{
		Console.WriteLine($"你好,我是{Name}");
	}
}

static void Main(string[] args)
{
	#region 直接注冊實(shí)現(xiàn)類,和接口沒有關(guān)系,將實(shí)現(xiàn)類注冊到服務(wù)容器中,然后通過實(shí)現(xiàn)類獲取服務(wù)
	ServiceCollection services=new ServiceCollection();
	services.AddTransient<TestServiceImpl>();
	//下面是兩種申請服務(wù)的方法,一種是sp.GetServices/一種是sp.CreateScope()
	using(ServiceProvider sp= services.BulidServiceProvider())
	{
		TestServiceImpl tsi=sp.GetService<TestServiceImpl>();
		t.Name="cdc";
		t.SayHi();
        using(IServiceScope scope1=sp.CreateScope())
        {
			TestServiceImpl t=scope1.ServiceProvider.GetService<TestServiceImpl>();
		}
	}
	#endregion
}

static void Main(string[] args)
{
	ServiceCollection services=new ServiceCollection();
	//注冊類型是接口,實(shí)現(xiàn)類型是方法
	services.AddScoped<ITestService,TestServiceImpl>();
	//這種寫法是為了傳參數(shù)
	services.AddSingleton<ITestService,new TestServiceImpl()>
	using(ServiceProvider sp=services.BulidServiceProvider())
	{
		ITestService ts1=sp.GetService<ITestService>();
		//ITestService ts1=(ITestService)sp.GetService(typeof(ITestService));
		ts1.Name="cdc";		
		ts1.SayHi();		
	}

}


DI會傳染的簡單范例文章來源地址http://www.zghlxwxcb.cn/news/detail-410803.html

namespace DIGOALL
{
	class Progrom
	{
		static void Main(string[] args)
		{
			ServiceClolection services=new ServiceCollection();
			services.AddScoped<Controller>();
			services.AddScoped<ILog,LogImpl>();
			services.AddScoped<IStorage,StorageImpl>();
			services.AddScoped<IConfig,ConfigImpl>();
			using(var sp= services.BulidServiceProvider())
			{
				var c=sp.GetRequiredService<Controller>();
				c.Test();
			}
			Console.ReadKey();
		}
	}
	class  Controller
	{
		private readonly ILog log;
		private readonly IStorage storage;
		public Controller(ILog log,IStorage storage) 
		{
			this.log=log;
			this.storage=storage;
		}
	
		public void Test()
		{
			this.log.Log("開始上傳");
			this.storage.Save("寫入的東西","1.txt");
			this.log.Log("上傳完畢");
		}
	}
	
	#region 日志類
	interface ILog
	{
		public void Log(string msg);
	}
	class LogImpl:ILog
	{
		public void Log(string msg)
		{
			Console.WriteLine($"日志:{msg}");
		}
	}
	#endregion
	
	#region 
	interface IConfig
	{
		public string GetValue(string name);
	}
	class ConfigImpl:IConfig
	{
		public void GetValue(string name)
		{
		 	return "hello";
		}		
	}
	#endregion
	
	#region 云存儲
	interface IStorage
	{
		public void Save(string content,string name);
	}
	class StorageImpl:IStorage
	{
		**關(guān)鍵點(diǎn):獲取配置服務(wù),構(gòu)造函數(shù)中賦值給成員變量**
		private readonly IConfig config;		
		public StorageImpl(IConfig config)
		{
			this.config=config;
		}
		public void Save(string content,string name)
		{
			string server=config.GetValue("server");
			Console.WriteLine($"向服務(wù)器{server}的文件名為{name}上傳{content}");
		}
	}
	#endregion
}

到了這里,關(guān)于.Net6.0系列-7 依賴注入(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【.NET6+WPF】WPF使用prism框架+Unity IOC容器實(shí)現(xiàn)MVVM雙向綁定和依賴注入

    【.NET6+WPF】WPF使用prism框架+Unity IOC容器實(shí)現(xiàn)MVVM雙向綁定和依賴注入

    前言:在C/S架構(gòu)上,WPF無疑已經(jīng)是“桌面一霸”了。在.NET生態(tài)環(huán)境中,很多小伙伴還在使用Winform開發(fā)C/S架構(gòu)的桌面應(yīng)用。但是WPF也有很多年的歷史了,并且基于MVVM的開發(fā)模式,受到了很多開發(fā)者的喜愛。 并且隨著工業(yè)化的進(jìn)展,以及幾年前微軟對.NET平臺的開源,國內(nèi)大多

    2024年02月06日
    瀏覽(27)
  • ASP.NET Core 依賴注入系列一

    ASP.NET Core 依賴注入系列一

    什么是ASP.NET Core 依賴注入? 依賴注入也稱DI是一項(xiàng)技術(shù)用來實(shí)現(xiàn)對象松耦合以至于應(yīng)用程序更容易維護(hù),ASP.NET Core通過控制器的構(gòu)造函數(shù)自動注入依賴的對象,我們創(chuàng)建ASP.NET Core MVC應(yīng)用程序演示依賴注入特性是如何工作, 在這節(jié)中我們講解該特性 1 例子 我們創(chuàng)建一個(gè)ASP.NET C

    2024年02月11日
    瀏覽(98)
  • 什么是依賴注入(Dependency Injection)?

    依賴注入(Dependency Injection,簡稱DI)是一種設(shè)計(jì)模式,用于實(shí)現(xiàn)類之間的解耦和依賴關(guān)系的管理。它通過將依賴關(guān)系的創(chuàng)建和維護(hù)責(zé)任轉(zhuǎn)移到外部容器中,使得類不需要自己實(shí)例化依賴對象,而是由外部容器動態(tài)地注入依賴。 傳統(tǒng)的對象創(chuàng)建方式往往由類自身負(fù)責(zé)創(chuàng)建和管

    2024年02月15日
    瀏覽(16)
  • Angular 17+ 高級教程 – Dependency Injection 依賴注入

    Angular 17+ 高級教程 – Dependency Injection 依賴注入

    本來是想先介紹 Angular Component 的,但 Component 里面會涉及到一些 Dependency Injection (簡稱 DI) 的概念,所以還是先介紹 DI 吧。 溫馨提醒:如果你對 JS class、prototype 不太熟悉的話,建議你先看這篇?JavaScript – 理解 Object, Class, This, Prototype, Function, Mixins ? 首先我們有一個(gè) class Ser

    2024年03月09日
    瀏覽(22)
  • Go 開源庫運(yùn)行時(shí)依賴注入框架 Dependency injection

    一個(gè)Go編程語言的運(yùn)行依賴注入庫。依賴注入是更廣泛的控制反轉(zhuǎn)技術(shù)的一種形式。它用于增加程序的模塊化并使其具有可擴(kuò)展性。 依賴注入是更廣泛的控制反轉(zhuǎn)技術(shù)的一種形式。它用于增加程序的模塊化并使其具有可擴(kuò)展性。 Providing Extraction Invocation Lazy-loading Interfaces Gro

    2024年02月07日
    瀏覽(30)
  • Spring6-IoC(Inversion of Control)控制反轉(zhuǎn)和DI(Dependency Injection)依賴注入,手動實(shí)現(xiàn)IOC

    Java 反射機(jī)制是在運(yùn)行狀態(tài)中,對于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對于任意一個(gè)對象,都能夠調(diào)用它的任意方法和屬性;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為 Java 語言的 反射機(jī)制 。簡單來說, 反射機(jī)制指的是程序在運(yùn)行時(shí)能夠獲取自身

    2024年02月09日
    瀏覽(43)
  • “warning NU1701: 項(xiàng)目依賴包與項(xiàng)目框架net6.0不完全兼容“

    一個(gè)Net6的Web項(xiàng)目,有一個(gè)警告: 在項(xiàng)目文件里,這樣 在nuget包管理器界面,看到 Microsoft.AspNet.WebApi.Core 的信息,其依賴于 Microsoft.AspNet.WebApi.Client ,且其也滿足 。NetStandard V2。0 的,但看這個(gè) Client ,其又依賴于NewtonnSoft.Json的舊版本,從而導(dǎo)致依賴鏈最終到了 NetFramework4.* 的

    2024年02月15日
    瀏覽(19)
  • 【ASP.NET Core 基礎(chǔ)知識】--依賴注入(DI)--什么是依賴注入

    依賴注入(Dependency Injection,簡稱DI)是一種設(shè)計(jì)模式,用于解耦和管理類之間的依賴關(guān)系。它的核心思想是將原本需要在代碼中顯式創(chuàng)建的依賴關(guān)系,交給外部容器進(jìn)行控制和管理。 具體來說,依賴注入的實(shí)現(xiàn)方式是通過將依賴對象的創(chuàng)建和維護(hù)責(zé)任轉(zhuǎn)移到外部容器中,使

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

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

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

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

    2023年04月16日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包