간단 한 의존 거꾸로 / 의존 주입 (Dependency Injection) 의 예
1.
메 일 발송 프로그램
class MailService
   {
     public void SendEmail(string address, string subject, string
       body)
     {
       var mail = new MailMessage();
       mail.To.Add(address);
       mail.Subject = subject;
       mail.Body = body;
       var client = new SmtpClient();
       // Setup client with smtp server address and port here
       client.Send(mail);
} }2.
로그 기능 추가
class MailService
{
  public void SendMail(string address, string subject, string
    body)
  {
    Console.WriteLine("Creating mail message...");
    var mail = new MailMessage();
    mail.To.Add(address);
    mail.Subject = subject;
    mail.Body = body;
    var client = new SmtpClient();
    // Setup client with smtp server address and port here
    Console.WriteLine("Sending message...");
    client.Send(mail);
    Console.WriteLine("Message sent successfully.");
} }현재 MailService 는 메 일과 기록 로 그 를 보 내 는 두 가지 직책 을 가지 고 있 습 니 다.
3.
로그 의 실현 세부 사항 을 분리 하 다.
class MailService
   {
     private ConsoleLogger logger;
     public MailService()
     {
       logger = new ConsoleLogger();
     }
     public void SendMail(string address, string subject, string
       body)
     {
       logger.Log("Creating mail message...");
       var mail = new MailMessage();
       mail.To.Add(address);
       mail.Subject = subject;
       mail.Body = body;
       var client = new SmtpClient();
       // Setup client with smtp server address and port here
       logger.Log("Sending message...");
       client.Send(mail);
       logger.Log("Message sent successfully.");
} }class ConsoleLogger
   {
     public void Log(string message)
     {
       Console.WriteLine("{0}: {1}", DateTime.Now, message);
     }
}이제 로그 기능 의 변경 을 ConsoleLogger 로 분리 할 수 있 습 니 다.예 를 들 어 윈도 이벤트 로그 방법 으로 로 그 를 기록 합 니 다.
4.
지금 은 개발 환경 과 생산 환경 에 따라 각각 다른 Logger 를 사용 해 야 한다 고 가정 합 니 다.예 를 들 어 개발 환경 용 ConsoleLogger, 생산 환경 용 EventLogger 등 이다.
class EventLogger
   {
     public void Log(string message)
     {
       EventLog.WriteEntry("MailService", message);
     }
}인터페이스
interface ILogger
   {
     void Log(string message);
   }class ConsoleLogger:ILogger
   {
     public void Log(string message)
     {
       Console.WriteLine("{0}: {1}", DateTime.Now, message);
     }
}class EventLogger:ILogger
{
  public void Log(string message)
  {
    EventLog.WriteEntry("MailService", message);
  }
}
구조 함수 인 자 를 통 해 MailService 는 구체 적 인 Logger 류 에 의존 하지 않 습 니 다. 로그 기능 에 대한 수정 은 MailService 에 영향 을 주지 않 습 니 다.
public MailService(ILogger logger)
   {
     this.logger = logger;
   }internal class Program
   {
     private static void Main(string[] args)
     {
       var mailService = new MailService(new EventLogger());
       mailService.SendMail("[email protected]", "My first DI
         App", "Hello World!");
     }
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.