2016-07-07 11 views

Odpowiedz

8

Logging dodaje następujące usługi DI

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

i Logger<> zależy od ILoggerFactory od DI.

Dla twojego drugiego scenariusza musisz wstrzyknąć ILoggerFactory zamiast ILogger.

public Foo(ILoggerFactory loggerFactory) 
{ 
    _logger = loggerFactory.CreateLogger("logger name here"); 
} 
0

Twój pierwszy scenerio działa, ponieważ ILogger<> dziedziczy z ILogger (see source code)

public interface ILogger<out TCategoryName> : ILogger 
{ 

} 

Ale jak @KiranChalla powiedział w LoggingServiceCollectionExtensionsILogger<> jest zarejestrowany (nie ILogger) więc drugi scenerio nie działa.