Will ILogger <T> introduce a new journal each time?

The registration examples in the documentation provide an example of how to insert a registrar into a controller:

public class TodoController : Controller
{
    private readonly ITodoRepository _todoRepository;
    private readonly ILogger _logger;

    public TodoController(ITodoRepository todoRepository,
        ILogger<TodoController> logger)
    {
        _todoRepository = todoRepository;
        _logger = logger;
    }
}

Is the DI environment creating a new registrar every time I introduce a registrar into something like this? Is there a better way?

+4
source share
1 answer

It is easy to answer an external source. When you execute services.AddLogging(), the default behavior is that it is ILogger<T>registered as a singleton :

public static IServiceCollection AddLogging(this IServiceCollection services, Action<ILoggingBuilder> configure)
{
    // …

    services.TryAdd(ServiceDescriptor.Singleton<ILoggerFactory, LoggerFactory>());
    services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(Logger<>)));

    // …
}

, ILogger<T> T , . , ILogger<TodoController> , .

, , . DI, . , ; .

, ? . , ( ), - ILogger<T> T, . Theres , , , , ;)

+6

Source: https://habr.com/ru/post/1691093/


All Articles