Есть ли более лаконичный способ регистрации глубоко вложенных специальных зависимостей в .NET ServiceCollection?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Есть ли более лаконичный способ регистрации глубоко вложенных специальных зависимостей в .NET ServiceCollection?

Сообщение Anonymous »

В веб-службе ASP.NET у меня есть обычные зависимости, например
services.AddScoped();
services.AddTransient();
services.AddTransient();
services.AddTransient();
services.AddTransient();
...

Но есть лишь несколько особенных, которые только в определенном контексте нам нужны исключения из вышеизложенного, поэтому мне нужно сделать следующее. В этом примере я хочу использовать новый экземпляр каждый раз, когда мне нужен новый IEmailService в контексте BackgroundService, а не использовать экземпляр с областью действия «по умолчанию», зарегистрированный выше, поэтому мне нужно сделать следующее:
services.AddTransient(sp =>
ActivatorUtilities.CreateInstance(sp,
ActivatorUtilities.CreateInstance(sp,
ActivatorUtilities.CreateInstance(sp,
// this is the only override we actually need (don't use scoped IEmailService)
ActivatorUtilities.CreateInstance(sp)
)
)
)
);

Теперь ICustomerService не требует собственной активации; Я просто хочу, чтобы он использовал обычную инъекцию зависимостей, зарегистрированную выше. То же самое для ICustomerCreationService и ICustomerValidationService. Но я думаю, что мне придется указать аргументы для всего дерева специальной зависимости с помощью ActivatorUtilities, верно? Есть ли более элегантный способ? Мне бы очень хотелось быть выше и сказать что-то подобное, но я не вижу выхода. Я пропустил это?
services.AddTransient(sp =>
ActivatorUtilities.CreateInstanceAtAnyLevel(sp) // I wish...
);


Подробнее здесь: https://stackoverflow.com/questions/784 ... ncies-in-n
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»