-
Notifications
You must be signed in to change notification settings - Fork 14
Open
Description
Hi,
In our solution we registers all dependencies with assembly scanning.
This results in thousands of registrations with a service name.
In LightInject.MS.DI v3.6.3, it was possible to resolve a type without specifying a service name.
But in the latest version, that is not possible anymore.
We use the CQRS pattern using MediatR, and sending a command through mediatR fails with all v4.x versions:
Unable to resolve type: MediatR.IRequestHandler`2[ClientX.ProjectY.Queries.WarmupApplication,ClientX.ProjectY.Dtos.SuccessOrFailureDto], service name:
System.InvalidOperationException:
at LightInject.ServiceContainer.CreateDelegate (LightInject, Version=7.0.1.0, Culture=neutral, PublicKeyToken=null)
at LightInject.ServiceContainer.CreateDefaultDelegate (LightInject, Version=7.0.1.0, Culture=neutral, PublicKeyToken=null)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60)
at MediatR.Wrappers.RequestHandlerWrapperImpl`2+<>c__DisplayClass1_0.<Handle>g__Handler|0 (MediatR, Version=12.0.0.0, Culture=neutral, PublicKeyToken=bb9a41a5e8aaa7e2)
at MediatR.Mediator.Send (MediatR, Version=12.0.0.0, Culture=neutral, PublicKeyToken=bb9a41a5e8aaa7e2)I created a unit test to illustratie the bug.
The following code works in LightInject.MS.DI v3.6.3 and doesn't work in v4.x:
//Options: like an ASP.NET Core application
var options = ContainerOptions.Default.Clone().WithMicrosoftSettings().WithAspNetCoreSettings();
var container = new ServiceContainer(options);
container.ConstructorDependencySelector = new AnnotatedConstructorDependencySelector();
container.ConstructorSelector = new AnnotatedConstructorSelector(container.CanGetInstance);
container.RegisterAssembly(typeof(TestClass).Assembly);
var resolveNamed = container.TryGetInstance<TestClass>("LightInject.Microsoft.DependencyInjection.Tests.TestClass");
var resolveUnnamed = container.TryGetInstance<TestClass>();
Assert.NotNull(resolveNamed);//LightInject.Microsoft.DependencyInjection v3.6.3 -> succeeds
Assert.NotNull(resolveUnnamed);//LightInject.Microsoft.DependencyInjection v3.6.3 -> succeedsIs it possible to make a fix, which also returns an instance for resolving an instance without specifying a name?
Metadata
Metadata
Assignees
Labels
No labels