Các mô-đun cấp cao không nên phụ thuộc vào các mô-đun cấp thấp. Cả hai đều phải phụ thuộc vào các yếu tố trừu tượng, không nên phụ thuộc vào các chi tiết. Thông tin chi tiết nên phụ thuộc vào các yếu tố trừu tượng. Nguyên tắc này chủ yếu liên quan đến việc giảm bớt sự phụ thuộc giữa các mô-đun mã.
Ví dụ
Mã trước khi đảo ngược phụ thuộc
using System; namespace SolidPrinciples.Dependency.Invertion.Before{ public class Email{ public string ToAddress { get; set; } public string Subject { get; set; } public string Content { get; set; } public void SendEmail(){ //Send email } } public class SMS{ public string PhoneNumber { get; set; } public string Message { get; set; } public void SendSMS(){ //Send sms } } public class Notification{ private Email _email; private SMS _sms; public Notification(){ _email = new Email(); _sms = new SMS(); } public void Send(){ _email.SendEmail(); _sms.SendSMS(); } } }
Mã sau khi đảo ngược phụ thuộc
using System.Collections.Generic; namespace SolidPrinciples.Dependency.Invertion.Before{ public interface IMessage{ void SendMessage(); } public class Email: IMessage{ public string ToAddress { get; set; } public string Subject { get; set; } public string Content { get; set; } public void SendMessage(){ //Send email } } public class SMS: IMessage{ public string PhoneNumber { get; set; } public string Message { get; set; } public void SendMessage(){ //Send Sms } } public class Notification{ private ICollection<IMessage> _messages; public Notification(ICollection<IMessage> messages){ this._messages = messages; } public void Send(){ foreach (var message in _messages){ message.SendMessage(); } } } }