就是这个(注入依赖)
private readonly ICustomerService _customerService;
public Billing(ICustomerService customerService)
{
_customerService = customerService;
}
与此(创建依赖项)
private readonly ICustomerService _customerService;
public Billing()
{
_customerService = new CustomerService();
}
他们说后一个示例很糟糕,因为......它违反了 DI......当然没有注入任何东西......但是如果 DI 不存在,那么有什么糟糕到需要从 Billing 类手动创建 CustomerService 呢?我认为服务接口的可交换性没有实际优势。
我要求一个带有源代码的实际示例,它可能是一个单元测试或显示一个实际解决方案,为什么它是如此松散耦合。
任何人都热衷于展示他的 DI 肌肉以及为什么它具有存在和应用的实际权利?
更新
所以人们不必阅读所有内容,我将在这里写下我的简短经验:
DI作为一种模式有实际用途。要通过不手动注入所有服务来遵循 DI(他们说这是一个糟糕的 DI 工具...),请使用 LightCore/Unity 之类的 DI 框架,但请确保您使用正确的工具来完成相应的工作。这是我没有做到的;-) 开发 mvvm/wpf 应用程序我还有其他要求,LightCore/Unity 工具无法支持它们甚至是障碍。我的解决方案是使用我很满意的 MEFEDMVVM。现在我的服务是在运行时而不是在启动时自动注入的。:-)