[英]What does the `binding` mean in the context of the DI pattern?
binding
在 DI 模式的上下文中意味着什么?
我正在這里瀏覽IoC
教程。 我遇到了以下摘錄:
依賴注入 (DI) 是一種用於實現 IoC 的設計模式。 它允許在類之外創建依賴對象,並通過不同的方式將這些對象提供給類。 使用 DI,我們將依賴對象的創建和綁定移到依賴它們的類之外。
我不明白這里指的是什么綁定?
我猜這里提到的綁定是關於設置客戶端類字段的。 但在這種情況下,我們不會移動與 DI 的綁定。 因為,DI有三種使用方式:構造函數、屬性(setter)和方法。 並且所有這些方式都不會將綁定(客戶端類字段的分配)移到類之外,所有這些都發生在客戶端類的范圍內。 所以,我在這里很困惑。
更新在對該問題提供了一些答案后,我得出的結論是,綁定是什么有兩種可能的定義。
1綁定意味着將依賴類內部使用的接口映射到實際的對象類型。
2綁定意味着將實際類型作為接口參數的參數傳遞到依賴類中。
正確的定義1或2 是什么? 還是綁定的定義取決於提到綁定的上下文?
綁定是什么意思?
這意味着我們的依賴類會被 IoC 容器自動解析。
我們有IRepository interface
和Repository 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.