Многоликая регистрация в стандартном контейнере
Допустим, у нас есть некоторый класс, который реализует более одного интерфейса:
Наша задача зарегистировать экземпляр
Попытавшись совершить регистрацию наивным путём, мы потерпим неудачу, зависимости будут ссылаться на разные экземпляры
Но проблема вполне решаема, достаточно лишь зарегистрировать вначале экземпляр
Допустим, у нас есть некоторый класс, который реализует более одного интерфейса:
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>();
services.AddSingleton<IFoo>(x => x.GetRequiredService<FooBar>());
services.AddSingleton<IBar>(x => x.GetRequiredService<FooBar>());