屬性注入
屬性注入允許在建立類依賴項後更新它們。如果你想簡化物件建立,但仍允許使用測試雙精度的測試覆蓋依賴項,這將非常有用。
考慮一個需要在錯誤條件下寫入日誌檔案的類。該類知道如何構造預設的 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,因為它在構造後立即提供了對物件狀態的更好保證。