Реализовано это будет через ключи (например строковые).
Возвращаясь к старому примеру, он преобразится следующим образом:
public interface IDependency {}
public class DependencyImplOne : IDependency {}
public class DependencyImplTwo : IDependency {}
builder.Services.AddKeyedSingleton<IDependency, DependencyImplOne>("one");
builder.Services.AddKeyedSingleton<IDependency, DependencyImplTwo>("two");Далее, использовать вот так, с помощью атрибута
[FromKeyedServices]:public class BarService : IBarService
{
public BarService([FromKeyedServices("one")] IDependency dependency) // DependencyImplOne
{
}
}
public class BazService : IBazService
{
public BazService([FromKeyedServices("two")] IDependency dependency) // DependencyImplTwo
{
}
}
Для меня, как поклонника ООП, это знаковая веха в развитии платформы 🔥
Считаю, что ради этой киллер фичи можно смело планировать переезд на новый LTS релиз!