我们使用依赖注入(DI)来实现 松散耦合 。选择任何特殊的DI容器并不那么重要。
每次使用
new关键字创建一个类的实例时,您都将代码紧密地耦合到该类,并且您将无法用另一个实例代替该特定实现(至少在不重新编译代码的情况下)。
在C#中看起来像这样(但在Java中是等效的):
public class MyClass{ public string GetMessage(int key) { return new MessageService().GetMessage(key) }}这意味着,如果您以后想要使用其他MessageService,则不能。
另一方面,如果您将一个接口注入类并遵守Liskov替换原则,则您将能够独立地改变使用者和服务。
public class MyClass{ private readonly IMessageService messageService; public MyClass(IMessageService messageService) { if(messageService == null) { throw new ArgumentNullException("messageService"); } this.messageService = messageService; } public string GetMessage(int key) { return this.messageService.GetMessage(key) }}尽管这看起来更为复杂,但我们现在已经设法遵循“
单一责任原则”,即确保每个协作者仅做一件事情,并且我们可以彼此独立地进行变更。
此外,我们现在可以更改MyClass的行为,而无需更改类本身,因此遵循了Open / Closed
Principle。



