간단 한 의존 거꾸로 / 의존 주입 (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;
}
MailService 는 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에 따라 라이센스가 부여됩니다.