欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

.Net Core 依賴注入

依賴注入

控制反轉(inversion of control,IOC)是設計模式中非常重要的思想,而依賴注入(dependency injection,DI)是控制反轉思想的一種重要的實現方式。依賴注入簡化了模塊的組裝過程,減小了模塊之間的耦合度,因此.NET Core中大量應用了依賴注入的開發(fā)模式

公司主營業(yè)務:網站制作、做網站、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現互聯網宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯推出橫縣免費做網站回饋大家。

控制反轉

控制反轉的目的是將“創(chuàng)建和組裝對象”操作的控制權從業(yè)務邏輯轉移到框架中。當我們需要某個類型的對象時,由框架來提供這個對象,我們不需要關注此對象的創(chuàng)建過程

服務定位器

假設框架中有個ServiceLocator的類,通過調用GetService()就能獲取我們想要的對象。至于對象創(chuàng)建過程我們則不需要關心

IDbConnection conn = ServiceLocator.GetService<IDbConnection>();

依賴注入

public class Demo
{
    IDbConnection conn;
    public Demo(IDbConnection conn)
    {
        this.conn = conn;
    }
}

系統(tǒng)在創(chuàng)建Demo類時,自動為conn 賦一個合適的對象。這種框架自動創(chuàng)建對象的動作就叫做注入

.NET Core 依賴注入的基本使用

.NET Core中內置了控制反轉機制,支持依賴注入和服務定位器兩種方式。由于依賴注入是推薦的方式,因此微軟將內置的控制反轉組件命名為DependencyInjection

生命周期

依賴注入框架中注冊的服務有一個重要的概念叫做“生命周期”,一共有三種

  • 瞬態(tài)(transient)每次被請求的時候都會創(chuàng)建一個新對象
  • 范圍(scoped)在給定的范圍內,服務每次被請求都會返回同一個對象
  • 單例(singleton)全局共享同一個服務對象

開始使用

安裝依賴包

Microsoft.Extensions.DependencyInjection

創(chuàng)建接口和實現類

public interface ITestService
{
    public void Run();
}
public class TestServiceImpl : ITestService
{
    public void Run()
    {
        Console.WriteLine("我是測試實現類");
    }
}

注冊服務和獲取服務

ServiceCollection services = new ServiceCollection();
services.AddScoped<ITestService, TestServiceImpl>(); //true,因為在同一范圍內獲取對象所以為true
//services.AddSingleton<ITestService, TestServiceImpl>(); 單例,全局共享一個對象,所以返回true
//services.AddTransient<ITestService, TestServiceImpl>(); 瞬態(tài)每次獲取都會創(chuàng)建一個新的對象,返回false

using (ServiceProvider sp = services.BuildServiceProvider())
{
    ITestService service1 = sp.GetRequiredService<ITestService>();
    ITestService service2 = sp.GetRequiredService<ITestService>();

    Console.WriteLine(service1 == service2); //true,因為在同一范圍內獲取對象所以為true

    Console.Read();
}

上面通過GetRequiredService方法來獲取ITestServcie對象,很顯然這種屬于服務定位器方式

通過構造函數注入服務

增加服務類

public interface IPayService
{
    public void Pay();
}
public class PayServiceImpl : IPayService
{
    public void Pay()
    {
        Console.WriteLine("支付了10元");
    }
}

改寫TestServiceImpl類

public class TestServiceImpl : ITestService
{
    public IPayService PayService;

    public TestServiceImpl(IPayService PayService)
    {
        this.PayService = PayService;
    }

    public void Run()
    {
        PayService.Pay();
    }
}

注冊服務和運行

ServiceCollection services = new ServiceCollection();
services.AddScoped<ITestService, TestServiceImpl>();
services.AddScoped<IPayService, PayServiceImpl>();

using (ServiceProvider sp = services.BuildServiceProvider())
{
    ITestService service = sp.GetRequiredService<ITestService>();
    service.Run();
}

輸出結果:支付了10元

不要在長生命周期的對象中引用比它短的生命周期的對象。比如不能在單例服務中引用范圍服務,否則可能會導致被引用的對象已經釋放或者導致內存泄漏

網頁名稱:.Net Core 依賴注入
文章分享:http://chinadenli.net/article4/dsoidie.html

成都網站建設公司_創(chuàng)新互聯,為您提供虛擬主機、自適應網站云服務器、響應式網站企業(yè)建站、建站公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

成都app開發(fā)公司