Несколько экземпляров объекта, предоставляемого посредством внедрения зависимостей.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Несколько экземпляров объекта, предоставляемого посредством внедрения зависимостей.

Сообщение Anonymous »

Предположим, у меня есть служба, которая отправляет электронные письма. Этому классу также необходим DI для получения настроек и добавления регистратора. Вот тривиальная реализация:

Код: Выделить всё

public interface IEmailService
{
public string From { get; set; }
public string To { get; set; }
public string Cc { get; set; }
public string Subject { get; set; }
public string Body { get; set; }

public bool Send();
}

public class EmailService: IEmailService
{
private readonly IOptions _settings;
private readonly IEmailLogService _logService;

public string From { get; set; }
public string To { get; set; }
public string Cc { get; set; }
public string Subject { get; set; }
public string Body { get; set; }

public EmailService(IOptions settings, IEmailLogService logService)
{
_settings = settings;
_logService = logService;
}

public bool Send()
{
SmtpClient smtpClient = new SmtpClient(_settings.SmtpHost);
MailMessage message= new System.Net.Mail.MailMessage(new MailAddress(From), new MailAddress(To));
message.Subject = Subject;
message.Body = Body;
if (Cc != null)
message.CC.Add(Cc);

smtpClient.Send(message);

logService.log();

return true;
}
}
Теперь у меня есть еще один сервис, которому нужно отправлять электронные письма

Код: Выделить всё

public interface ISomeService
{
public void SendEmails();
}

public class SomeService: ISomeService
{
private readonly IEmailService _emailService;

public SomeService(IEmailService emailService)
{
_emailService = emailService;
}

public void SendEmails()
{
// Send first email
_emailService.From = "sender@example.com";
_emailService.To = "recipient@example.com";
_emailService.Cc= "recipient_cc@example.com";
_emailService.Subject = "My Subject";
_emailService.Body= "My Message";
_emailService.Send();

// Send 2nd email
_emailService.From = "sender@example.com";
_emailService.To = "recipient2@example.com";
_emailService.Subject = "My Subject 2";
_emailService.Body= "My Message 2";
_emailService.Send();
}
}
Вы можете видеть, что _emailService является общим участником, а в моем втором электронном письме случайно установлена ​​копия из предыдущего сообщения. Помимо необходимости заполнять поля, как я могу создать несколько объектов EmailService, которые не используют общие данные?

Подробнее здесь: https://stackoverflow.com/questions/784 ... -injection
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»