Skip to content

Transitive KeydService #97489

Open
Open
@pengweiqhca

Description

@pengweiqhca

Description

Injecting into a keyed service should prioritize keyed service.

Reproduction Steps

var services = new ServiceCollection();

services.AddSingleton(_ => new A("Default"))
    .AddKeyedSingleton(KeyedService.AnyKey, (_, _) => new A("AnyKey"))
    .AddKeyedSingleton("Keyed", (_, _) => new A("Keyed"))
    .AddSingleton<B>().AddKeyedSingleton<B>(KeyedService.AnyKey);

var provider = services.BuildServiceProvider();

provider.GetRequiredService<B>().A.Write();
provider.GetRequiredKeyedService<B>("Keyed").A.Write();
provider.GetRequiredKeyedService<B>(new()).A.Write();

class A(object a)
{
    public void Write() => Console.WriteLine(a);
}

class B(A a)
{
    public A A { get; } = a;
}

Expected behavior

Default
Keyed
AnyKey

Actual behavior

Default
Default
Default

Regression?

No response

Known Workarounds

No response

Configuration

No response

Other information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions