khellang / Scrutor

Assembly scanning and decoration extensions for Microsoft.Extensions.DependencyInjection
MIT License
3.64k stars 239 forks source link

Upgrade from 4.2.2 to 5.0.1 breaks decoration #237

Open lukasvavrek opened 2 weeks ago

lukasvavrek commented 2 weeks ago

Hi, while playing around updating and upgrading my app I run into a compatibility issue.

Here is an example of the registration code:

public static class DependencyInjection
{
    public static IServiceCollection AddApplication(this IServiceCollection services)
    {
        services.Scan(scan =>
            scan.FromCallingAssembly()
                .AddClasses(classes => classes
                    .AssignableTo(typeof(IRequestHandler<,>))
                    .NotInNamespaceOf<IRequestHandlerBehavior>())
                .AsImplementedInterfaces()
                .WithTransientLifetime()
        );

        services.Decorate(typeof(IRequestHandler<,>), typeof(RequestExceptionHandler<,>));

        return services;
    }
}

While this works as expected in version 4.2.2, in 5.0.1 I am running into:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.Populate()
   at Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(ICollection`1 serviceDescriptors, ServiceProviderOptions options)
   at Microsoft.Extensions.DependencyInjection.ServiceCollectionContainerBuilderExtensions.BuildServiceProvider(IServiceCollection services, ServiceProviderOptions options)
   at Microsoft.Extensions.Hosting.HostApplicationBuilder.Build()
   at Microsoft.AspNetCore.Builder.WebApplicationBuilder.Build()
   at Program.<Main>$(String[] args) in /XXX/Program.cs:line 15

Let me please know if I can provide some useful information!

khellang commented 2 weeks ago

Thanks for the bug report! Looks like it comes from deep within the container code. Need to dig a bit here 😅

Mike-E-angelo commented 5 days ago

Related: #235