Luka
Luka

Reputation: 4211

Error when resolving ILogger in Console application

I can't resolve ILogger instance in my console application...

I'm using Unity IoC and Serilog.

The registration is done like this:

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

    return log;
}, new ContainerControlledLifetimeManager());

And then when I try this:

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

I get an exception:

Unity.ResolutionFailedException HResult=0x80131500 Message=Failed to select a constructor for Serilog.Core.Logger _____________________________________________________ Exception occurred while:

•resolving type: 'ILogger' mapped to 'Logger'

Source=Unity.Container StackTrace: at Unity.UnityContainer.ExecuteValidatingPlan(BuilderContext& context)
at Unity.UnityContainer.Unity.IUnityContainer.Resolve(Type type, String name, ResolverOverride[] overrides) at Unity.UnityContainerExtensions.Resolve[T](IUnityContainer container, ResolverOverride[] overrides) Inner Exception 1: InvalidOperationException: Failed to select a constructor for Serilog.Core.Logger

Inner Exception 2: InvalidRegistrationException: Exception of type 'Unity.Exceptions.InvalidRegistrationException' was thrown.

I even tried registering it like this:

container = new UnityContainer();

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

container.RegisterInstance<ILogger>(log);

but with the same resulting exception thrown.

Please help

Upvotes: 0

Views: 562

Answers (1)

Luka
Luka

Reputation: 4211

Found the problem... The problem was this line of code down the road, overriding my configuration:

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

Upvotes: 0

Related Questions