Ошибка при разрешении ILogger в консольном приложении - PullRequest
0 голосов
/ 09 мая 2019

Я не могу разрешить экземпляр ILogger в своем консольном приложении ...

Я использую Unity IoC и Serilog.

Регистрация выполняется следующим образом:

container = new UnityContainer();    
container.RegisterFactory<ILogger>(factory =>
{
    ILogger log = new LoggerConfiguration()
        .WriteTo.Console()
        .CreateLogger();

    return log;
}, new ContainerControlledLifetimeManager());

И затем, когда я пытаюсь это сделать:

var logger = container.Resolve<ILogger>();

я получаю исключение:

Unity.ResolutionFailedException HResult = 0x80131500 Сообщение = Не удалось выбрать конструктор для Serilog.Core.Logger _____________________________________________________ Исключение произошло при:

• разрешающем типе: 'ILogger' сопоставлен с 'Logger'

Source = Unity.Container StackTrace: в Unity.UnityContainer.ExecuteValidatingPlan (BuilderContext & context)
в Unity.UnityContainer.Unity.IUnityContainer.Resolve (тип Type, имя строки, переопределяет ResolverOverride []) в Unity.UnityContainerExtensions.Resolve [T] (переопределяет контейнер IUnityContainer, переопределение ResolverOverride []) Исключение внутреннего исключения: исключение внутреннего исключения: 1выберите конструктор для Serilog.Core.Logger

Внутреннее исключение 2: InvalidRegistrationException: было сгенерировано исключение типа «Unity.Exceptions.InvalidRegistrationException».

Я даже попытался зарегистрировать его так:

container = new UnityContainer();

ILogger log = new LoggerConfiguration()
            .WriteTo.Console()
            .CreateLogger();

container.RegisterInstance<ILogger>(log);

, но с тем же результирующим исключением.

Пожалуйста, помогите

1 Ответ

0 голосов
/ 09 мая 2019

Обнаружена проблема ... Проблема заключалась в том, что эта строка кода переопределяла мою конфигурацию:

container.RegisterTypes(AllClasses.FromAssembliesInBasePath(), WithMappings.FromMatchingInterface, WithName.Default);
...