簡體   English   中英

“綁定”在 DI 模式的上下文中是什么意思?

[英]What does the `binding` mean in the context of the DI pattern?

binding在 DI 模式的上下文中意味着什么?

我正在這里瀏覽IoC教程。 我遇到了以下摘錄:

依賴注入 (DI) 是一種用於實現 IoC 的設計模式。 它允許在類之外創建依賴對象,並通過不同的方式將這些對象提供給類。 使用 DI,我們將依賴對象的創建和綁定移到依賴它們的類之外。

我不明白這里指的是什么綁定?

我猜這里提到的綁定是關於設置客戶端類字段的。 但在這種情況下,我們不會移動與 DI 的綁定。 因為,DI有三種使用方式:構造函數、屬性(setter)和方法。 並且所有這些方式都不會將綁定(客戶端類字段的分配)移到類之外,所有這些都發生在客戶端類的范圍內。 所以,我在這里很困惑。

更新在對該問題提供了一些答案后,我得出的結論是,綁定是什么有兩種可能的定義。

1綁定意味着將依賴類內部使用的接口映射到實際的對象類型。

2綁定意味着將實際類型作為接口參數的參數傳遞到依賴類中。

正確的定義12 是什么? 還是綁定的定義取決於提到綁定的上下文?

綁定是什么意思?

這意味着我們的依賴類會被 IoC 容器自動解析。

例如:

我們有IRepository interfaceRepository class

如果我們將這兩個綁定在一起。 每次我們請求IRepository ,我們的容器都會自動為我們提供Repository類。

這使得更改 Repository 類的實現變得非常容易。 既然我們不會立即依賴它 我們從不說新的 Repository類。 我們只提供接口,其他一切都由容器來處理。 例如,您可以說 IRepository 綁定到 DatabaseRepository 類。 更改您的容器綁定而不更改其他任何內容。

這一切都是由於 IoC 容器中的綁定而發生的。 這在您的應用程序中提供了很大的靈活性。

此外,我們可以使用容器中的綁定命令為我們的對象提供生命周期,通常是這三個(Singleton、PerInstance、Scoped)。

可以使類不知道注入到其中的實際類。

它可以依賴於接口,而不是類,其中實例化哪個類以“實現”每個接口的邏輯可以委托給類本身(或配置)外部的代碼。

所以我們可以說在需要接口的地方注入一個類的動作就像“綁定”。

您可以編寫沒有依賴注入的代碼,如下所示:

class NoDiRadio
{
    public EnergizerBattery Battery { get; set; }

    public NoDiRadio()
    {
        Battery = new EnergizerBattery(); // creation and binding inside of NoDiRadio
    }
}

class EnergizerBattery
{
    public void Start()
    {
    }        
}

但是,您可以編寫更松散耦合的代碼和更可測試的代碼,如下所示:

class DiRadio
{
    public IBattery Battery { get; set; }

    public DiRadio(IBattery battery)
    {
        Battery = battery;
    }
}

interface IBattery
{
    void Start();
}

class EnergizerBattery : IBattery
{
    public void Start()
    {
    }        
}

然后我們將依賴對象的創建和綁定移到依賴它們的類之外

IBattery battery = new DuracellBattery(); // creation and **binding** to IBattery here
var diRadio = new DiRadio(battery);

更新:

在 IoC-container 中綁定意味着,當我們看到IBattery ,我們的 IoC 容器將解析一個DuracellBattery實例並注入它。 這是Ninject Bind方法的示例:

Bind<IBattery>().To<DuracellBattery>()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM