属性注入
属性注入允许在创建类依赖项后更新它们。如果你想简化对象创建,但仍允许使用测试双精度的测试覆盖依赖项,这将非常有用。
考虑一个需要在错误条件下写入日志文件的类。该类知道如何构造默认的 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,因为它在构造后立即提供了对对象状态的更好保证。