В веб-службе 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
Есть ли более лаконичный способ регистрации глубоко вложенных специальных зависимостей в .NET ServiceCollection? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение