最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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>();
            //同一個范圍內獲取的是同一個對象范圍指“{}”再統(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();

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

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

services.AddSingleton<TestServiceImpl2>();

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

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

相關文章

  • C#中String StringBuilder StringBuffer類的用法

    C#中String StringBuilder StringBuffer類的用法

    這篇文章給大家簡單介紹下C#中String StringBuilder StringBuffer三個類的用法,需要的的朋友參考下吧
    2017-05-05
  • C# 判斷語句詳解與應用示例小結

    C# 判斷語句詳解與應用示例小結

    C#作為一種強大的編程語言,提供了豐富的判斷語句,能夠幫助我們實現(xiàn)復雜的程序邏輯,本文將詳細解析 C# 的判斷語句,包括它們的語法、使用方法以及在實際編程中的應用,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • C#?創(chuàng)建vba用的類庫

    C#?創(chuàng)建vba用的類庫

    本文詳細介紹了如何在VBA中使用C#編寫的COM組件,首先創(chuàng)建一個C#項目,定義ComVisible特性和生成GUID,然后修改.csproj文件并編譯生成.dll文件,之后將該.dll文件注冊到系統(tǒng),最后在VBA代碼中使用CreateObject方法創(chuàng)建該對象并調用其方法
    2026-04-04
  • C# Winform使用擴展方法實現(xiàn)自定義富文本框(RichTextBox)字體顏色

    C# Winform使用擴展方法實現(xiàn)自定義富文本框(RichTextBox)字體顏色

    這篇文章主要介紹了C# Winform使用擴展方法實現(xiàn)自定義富文本框(RichTextBox)字體顏色,通過.NET的靜態(tài)擴展方法來改變RichTextBox字體顏色,需要的朋友可以參考下
    2015-06-06
  • C#簡單數(shù)字圖像處理程序

    C#簡單數(shù)字圖像處理程序

    這篇文章主要為大家詳細介紹了C#簡單數(shù)字圖像處理程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • C#如何動態(tài)設置屏幕分辨率

    C#如何動態(tài)設置屏幕分辨率

    這篇文章主要為大家詳細介紹了C#動態(tài)設置屏幕分辨率的方法,我們可以使用Screen類設置屏幕分辨率,感興趣的小伙伴們可以參考一下
    2016-04-04
  • WinForm拖拽控件生成副本的解決方法

    WinForm拖拽控件生成副本的解決方法

    這篇文章主要介紹了WinForm拖拽控件生成副本的解決方法,對C#新手有一定的學習借鑒價值,需要的朋友可以參考下
    2014-08-08
  • C# 元組和值元組的具體使用

    C# 元組和值元組的具體使用

    這篇文章主要介紹了C# 元組和值元組的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Graphics.DrawImage繪制的圖像變大的原因分析及解決

    Graphics.DrawImage繪制的圖像變大的原因分析及解決

    這篇文章主要介紹了Graphics.DrawImage繪制的圖像變大的原因分析及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • C#中的命名空間詳解(Namespace)

    C#中的命名空間詳解(Namespace)

    文章介紹了命名空間在C#編程中的作用,包括命名空間的定義與使用、using關鍵字的使用以及嵌套命名空間的實現(xiàn),通過這些機制,開發(fā)者可以有效地組織和隔離代碼,避免命名沖突,提高代碼的可讀性和可維護性
    2024-12-12

最新評論

甘洛县| 花莲县| 临江市| 西吉县| 林口县| 长乐市| 广南县| 涟源市| 公安县| 扎赉特旗| 木兰县| 平远县| 霍州市| 特克斯县| 象山县| 城固县| 江口县| 全州县| 鸡东县| 镇沅| 广东省| 理塘县| 黄梅县| 襄樊市| 当雄县| 盐边县| 开化县| 东乡县| 宁晋县| 重庆市| 宜宾县| 邯郸县| 铜陵市| 六安市| 黔江区| 隆尧县| 恩平市| 新和县| 珠海市| 海安县| 来凤县|