Я изучаю службы, и мой учебник создает службу:

services.AddTransient<IMailService, NullMailService>();

Где NullMailService определяется следующим образом:

public class NullMailService : IMailService
  {
    private readonly ILogger<NullMailService> _logger;

    public NullMailService(ILogger<NullMailService> logger)
    {
      _logger = logger;
    }

    public void SendMessage(string to, string subject, string body)
    {
      // Log the message
      _logger.LogInformation($"To: {to} Subject: {subject} Body: {body}");
    }
  }

Затем это реализуется в действии

    private readonly IMailService _mailService;

    public AppController(IMailService mailService)
    {
      _mailService = mailService;
    }

Затем объект _mailService можно использовать для доступа к методу SendMessage.

Я не понимаю, где инициализируется переменная logger в конструкторе NullMailService? Ему никогда не передается ILogger в качестве аргумента, поэтому я не понимаю, где, когда и как он получает / определяет эту переменную регистратора.

1
Tom Bennett 10 Фев 2021 в 23:25

1 ответ

Лучший ответ

В вашем программном классе у вас есть этот код:

public static void Main(string[] args)
{
            CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

Хост - это объект, который инкапсулирует ресурсы приложения, такие как ведение журнала или внедрение зависимостей (DI) и многие другие.

Таким образом, Host.CreateDefaultBuilder (args) по умолчанию добавляет поставщиков журналов (среди многих других служб) для использования.

Вы можете увидеть в коде класс Startup. Класс Startup включает метод ConfigureServices для настройки служб приложения. Сервис - это многократно используемый компонент, который обеспечивает функциональность приложения. Службы регистрируются в ConfigureServices и используются в приложении через внедрение зависимостей (DI) или ApplicationServices.

Первоначально IServiceCollection из ConfigureServices содержит службы, определенные структурой в зависимости от того, как был настроен хост.

Microsoft.Extensions.Logging.ILogger и Microsoft.Extensions.Logging.ILoggerFactory - это лишь небольшие примеры этих зарегистрированных в платформе служб.

5
Sergey 11 Фев 2021 в 10:33