屬性注入

屬性注入允許在建立類依賴項後更新它們。如果你想簡化物件建立,但仍允許使用測試雙精度的測試覆蓋依賴項,這將非常有用。

考慮一個需要在錯誤條件下寫入日誌檔案的類。該類知道如何構造預設的 Logger,但允許通過屬性注入來覆蓋它。然而值得注意的是,使用屬性注入這種方式,你將這個類緊密地耦合到 ILogger 的精確實現,在這個給定的例子中是 ConcreteLogger。可能的解決方法可能是返回所需 ILogger 實現的工廠。

public class RecordProcessor
{
    public RecordProcessor()
    {
        Logger = new ConcreteLogger();
    }

    public ILogger Logger { get; set; }

    public void DoSomeProcessing()
    {
        // ...
        _logger.Log("Complete");
    }
}

在大多數情況下,建構函式注入優於 Property Injection,因為它在構造後立即提供了對物件狀態的更好保證。