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

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

Войти через центр авторизации
Похожие вопросы