Sellec
@Sellec
Кодер

Возможна ли перепривязка типа в DI контейнере ASP.Net Core?

Суть задачи - имеется интерфейс ITest.
Для него существует реализация на основе класса TestClass1.
В методе ConfigureServices создается привязка следующим образом:
public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITest, TestClass1>();
}

После запуска приложение использует экземпляр зависимости на основе TestClass1 через обращение к IServiceProvider.GetService().
Что произойдет, если во время выполнения приложения необходимо осуществить перепривязку интерфейса от типа TestClass1 к типу TestClass2, тоже реализующему интерфейс ITest? Какой подход используется в этом случае?
Как подходить к такой ситуации, если в некоторых случаях привязка singleton-объекта должна быть строгой, без возможности перепривязывания, а в некоторых допускается перепривязка.
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 2
petermzg
@petermzg
Самый лучший программист
Задайте его типом Transient и в методе фабрике возвращаете нужный инстанс обьекта
serviceCollection.AddTransient<ITest>((serviceProvider) =>
{
     return (<условие>) ? new TestClass1() : new TestClass2();
});
Ответ написан
yarosroman
@yarosroman Куратор тега C#
C# the best
Насколько я знаю, все зависимости определяются в момент запуска и переопределить их нельзя, встроенный контейнер не даёт такой возможности.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
MSP360 Санкт-Петербург
от 90 000 до 170 000 ₽
ПРОФЭЛИТ Казань
от 100 000 до 170 000 ₽
Почта Банк Москва
от 200 000 до 240 000 ₽