Допустим, у нас есть некоторый класс, который реализует более одного интерфейса:
public interface IBar {}
public interface IFoo {}
public class FooBar : IFoo, IBar {}
Наша задача зарегистировать экземпляр FooBar таким образом, чтобы при внедрении зависимостей IBar и IFoo использовался один и тот же объект.Попытавшись совершить регистрацию наивным путём, мы потерпим неудачу, зависимости будут ссылаться на разные экземпляры
FooBar:services.AddSingleton<IFoo, FooBar>();Но проблема вполне решаема, достаточно лишь зарегистрировать вначале экземпляр
services.AddSingleton<IBar, FooBar>();
FooBar и затем ссылаться на него:services.AddSingleton<FooBar>();#полезное #tips
services.AddSingleton<IFoo>(x => x.GetRequiredService<FooBar>());
services.AddSingleton<IBar>(x => x.GetRequiredService<FooBar>());