Skip to content

Diagnostic extension causes crash of ASP.NET Core applications #47

Open
@hypercodeplace

Description

@hypercodeplace

How to reproduce

Use standard ASP.NET Core application (I'm tried on netcoreapp2.1, netcoreapp2.2 and netcoreapp3.0)

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Unity;
using Unity.Microsoft.DependencyInjection;

namespace WebApplication1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseUnityServiceProvider(new UnityContainer()
                    .AddExtension(new Diagnostic()) // <---- without this line everything is ok
                )
                .UseStartup<Startup>();
    }
}

The following exception throws:

System.InvalidOperationException: No service for type 'Microsoft.Extensions.Logging.ILogger`1[Microsoft.AspNetCore.Hosting.Internal.WebHost]' has been registered.
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
   at WebApplication1.Program.Main(String[] args)

The real under hood exception from Unity.Microsoft.DependencyInjection.ServiceProvider is

Unity.ResolutionFailedException: Ambiguous constructor: Failed to choose between LoggerFactory(System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Logging.ILoggerProvider], Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerFilterOptions]) and LoggerFactory(System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Logging.ILoggerProvider], Microsoft.Extensions.Logging.LoggerFilterOptions)
_____________________________________________________
Exception occurred while:

•resolving type:  'ILoggerFactory' mapped to 'LoggerFactory'
  for parameter:  'factory'
  on constructor:  Logger`1(ILoggerFactory factory)
   •resolving type:  'ILogger`1' mapped to 'Logger`1'

If remove Diagnostic extension from the container then everything works fine.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions