欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# DI依賴注入的實現(xiàn)示例

 更新時間:2023年12月12日 11:33:50   作者:白沙王  
依賴注入是一種實現(xiàn)的方法,用于減少代碼之間的耦合,本文主要介紹了C# DI依賴注入的實現(xiàn)示例,具有一定的參考價值,感興趣可以了解一下

本文介紹了C# DI依賴注入的實現(xiàn)示例,具體如下:

using Microsoft.Extensions.DependencyInjection;
using System;

namespace ioc1
{
    class Program
    {
        static void Main(string[] args)
        {
            ServiceCollection services = new ServiceCollection();
            //每次請求獲取都是新的對象實例
            services.AddTransient<ITestService, TestServiceImpl>();
            //每次在一個生命周期中請求獲取的都是同一個對象
            services.AddSingleton<TestServiceImpl2>();
            //同一個范圍內(nèi)獲取的是同一個對象范圍指“{}”再統(tǒng)一個大括號中的對象
            services.AddScoped<TestServiceImpl3>();
            using( ServiceProvider sp = services.BuildServiceProvider())
            {
                //GetService如果找不到服務,就返回null
                //GetRequiredService:必須的,如果找不到就報異常
                //GetServices找到服務的集合;
                ITestService t = sp.GetService<ITestService>();
                t.Name = "白沙王";
                t.SayHi();
                ITestService t1 = sp.GetService<ITestService>();
                Console.WriteLine(t.GetType());
                Console.WriteLine(object.ReferenceEquals(t,t1));
                t1.Name = "喜馬拉雅";
                t1.SayHi();
                Console.WriteLine("----------------------");
                TestServiceImpl2 t2 = sp.GetService<TestServiceImpl2>();
                t2.Name = "白沙王";
                t2.SayHi();
                TestServiceImpl2 t21 = sp.GetService<TestServiceImpl2>();
                Console.WriteLine(object.ReferenceEquals(t2, t21));
                t21.Name = "喜馬拉雅";
                t21.SayHi();
                t2.SayHi();
                Console.WriteLine("----------------------");
                using (IServiceScope scope1 = sp.CreateScope())
                {
                    //再scope中獲取scope相關對象,scope.ServiceProvider而不是sp
                    TestServiceImpl3 t3 = scope1.ServiceProvider.GetService<TestServiceImpl3>();
                    t3.Name = "白沙王";
                    t3.SayHi();
                    TestServiceImpl3 t33 = scope1.ServiceProvider.GetService<TestServiceImpl3>();
                    t33.Name = "喜馬拉雅";
                    t33.SayHi();
                    Console.WriteLine(object.ReferenceEquals(t3, t33));
                }
            }
                Console.ReadKey();
        }
    }
    interface ITestService
    {
        string Name { get; set; }
        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}");
        }
    }


    public class TestServiceImpl3 : ITestService
    {
        public string Name { get; set; }

        public void SayHi()
        {
            Console.WriteLine($"you good,我是{Name}");
        }
    }
}

Nuget添加Microsoft.Extensions.DependencyInjection;引用

1.ServiceCollection services = new ServiceCollection();

這行代碼創(chuàng)建了一個新的ServiceCollection實例。這是.NET Core中用于管理服務(也就是依賴項)的容器。

2.services.AddTransient<TestServiceImpl>();

這行代碼向ServiceCollection中添加了一個名為TestServiceImpl的臨時服務。AddTransient方法告訴.NET Core在每次請求該服務時創(chuàng)建一個新的實例。這意味著每次從服務提供者獲取該服務時,都會得到一個新的TestServiceImpl實例。

3. using( ServiceProvider sp = services.BuildServiceProvider())

這行代碼創(chuàng)建了一個ServiceProvider實例,該實例是.NET Core中實現(xiàn)依賴注入的實際對象。使用BuildServiceProvider方法后,你可以使用這個ServiceProvider實例來獲取之前添加的服務。

4. TestServiceImpl t = sp.GetService<TestServiceImpl>();

這行代碼使用創(chuàng)建的ServiceProvider實例sp來獲取一個類型為TestServiceImpl的服務。由于之前使用的是AddTransient<TestServiceImpl>(),所以這里會得到一個新的TestServiceImpl實例。

5. t.Name = "白沙王";

這行代碼給獲取到的TestServiceImpl實例的Name屬性賦值,將其設置為"白沙王"。

6. t.SayHi();

這行代碼調(diào)用TestServiceImpl實例的SayHi方法。這個方法可能會輸出一些信息,但由于你沒有給出TestServiceImpl類的定義,我無法確定其具體行為。

總的來說,這段代碼創(chuàng)建了一個服務,注冊到了依賴注入容器中,并從容器中獲取這個服務來使用。這是.NET Core應用中常見的依賴注入模式的一個例子。

services.AddSingleton<TestServiceImpl2>();

這行代碼向ServiceCollection中添加了一個名為TestServiceImpl2的單例服務。這意味著在整個應用程序的生命周期中,只有一個TestServiceImpl2實例會被創(chuàng)建,并且每次請求該服務時都會返回同一個實例。

到此這篇關于C# DI依賴注入的實現(xiàn)示例的文章就介紹到這了,更多相關C# DI依賴注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#的WebBrowser操作frame實例解析

    C#的WebBrowser操作frame實例解析

    這篇文章主要介紹了C#的WebBrowser操作frame實例解析,很適合C#初學者參考借鑒,需要的朋友可以參考下
    2014-08-08
  • 你是不是這樣寫異常處理代碼的呢?

    你是不是這樣寫異常處理代碼的呢?

    本篇文章是對,你是不是這樣寫異常處理代碼的進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 基于C#編寫經(jīng)理評分系統(tǒng)

    基于C#編寫經(jīng)理評分系統(tǒng)

    最近接了這樣一個項目,要求使用c#編寫經(jīng)理評分系統(tǒng),需求,要顯示員工信息,實現(xiàn)項目經(jīng)理給員工評分功能,今天小編分步驟給大家介紹,需要的的朋友參考下
    2017-03-03
  • C#中使用WinRAR實現(xiàn)加密壓縮及解壓縮文件

    C#中使用WinRAR實現(xiàn)加密壓縮及解壓縮文件

    這篇文章主要介紹了C#中使用WinRAR實現(xiàn)加密壓縮及解壓縮文件,本文直接給出實例代碼,代碼中包含詳細注釋,需要的朋友可以參考下
    2015-07-07
  • C#中使用Spire.doc對word的操作方式

    C#中使用Spire.doc對word的操作方式

    這篇文章主要介紹了C#中使用Spire.doc對word的操作方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • c#多線程程序設計實例方法

    c#多線程程序設計實例方法

    在本篇文章里小編給大家分享了關于c#多線程程序設計實例步驟,需要的朋友們學習參考下。
    2019-02-02
  • C# wpf使用ffmpeg命令行實現(xiàn)錄屏的示例代碼

    C# wpf使用ffmpeg命令行實現(xiàn)錄屏的示例代碼

    本文主要介紹了C# wpf使用ffmpeg命令行實現(xiàn)錄屏的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • C#連接Informix數(shù)據(jù)庫的問題

    C#連接Informix數(shù)據(jù)庫的問題

    這篇文章主要介紹了C#連接Informix數(shù)據(jù)庫的問題,本文給大家介紹的非常詳細,對大家的工作或?qū)W習具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C#實現(xiàn)異步操作的幾種方式

    C#實現(xiàn)異步操作的幾種方式

    在C#中,異步操作可以提高程序的性能和響應能力,本文主要介紹了C#實現(xiàn)異步操作的幾種方式,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C#給Excel添加水印實例詳解

    C#給Excel添加水印實例詳解

    這篇文章主要介紹了C#給Excel添加水印實例的相關資料,需要的朋友可以參考下
    2016-09-09

最新評論