Каковы недостатки создания этого «промежуточного поставщика услуг»?
В вашем приложении может оказаться несколько контейнеров. Один из главных недостатков - ваши одноэлементные сервисы могут существовать в нескольких контейнерах. т. е. несколько экземпляров одиночной службы.
Начиная с ASP. NET Core 3.0, если вы вызываете BuildServiceProvider
в методах настройки, вы увидите предупреждение:
Calling 'BuildServiceProvider' from application code results in an additional copy of
singleton services being created. Consider alternatives such as dependency injecting
services as parameters to 'Configure'.
Комментарий от @ devNull дает больше подробностей, если вы также хотите прочитать.
Будет ли мой объект wso2Actions по-прежнему управляться инфраструктурой внедрения зависимостей?
Да.
(Как будто его впрыснули позже?)
Нет. Если позже вы добавите wso2Actions
, например, в свой контроллер, контейнер, используемый для разрешения экземпляра, будет контейнером, используемым ASP. NET Core. Принимая во внимание, что в вашем ConfigureServices
экземпляр разрешается с использованием временного контейнера, созданного вашим кодом.
Обратите внимание, что оба контейнера независимы и могут содержать разные регистрации служб.
Буду ли я Вам лучше просто «обновить» объект?
Если вы хотите использовать new
, то почему бы и нет.
Если вы готовы использовать внедрение зависимостей, Есть несколько вариантов в зависимости от того, для чего wso2Actions
предназначен:
Переместите свой код в Configure
Очевидно, вы можете переместить свой код в Configure
, что Вызывается после сборки контейнера:
var wso2Actions = app.ApplicationServices.GetService<Wso2Actions>();
Использовать шаблон параметров
Чтение this .
services.AddOptions<MyOptions>("optionalName")
.Configure<Service1, Service2, Service3, Service4, Service5>(
(o, s, s2, s3, s4, s5) =>
o.Property = DoSomethingWith(s, s2, s3, s4, s5));