Мне нужно создать новые экземпляры без использования самого контейнера. Я использую InversifyJS DI контейнер.
Видя это единственное решение: https://github.com/inversify/InversifyJS/issues/520#issuecomment-291024966
Вы можете создать фабрику и использовать ее в качестве службы ввода для создания экземпляров.
Но мой случай немного сложнее, у меня есть abstract , называемый BaseState
, и около 5 состояний, которые реализуют BaseState
.
Так что, если я преобразую его решение вмой код в привязках это будет:
bind<{new(): BaseState}>("InitialStateConstructor").toConstructor(InitialValidationState);
bind<{new(): BaseState}>("CreateStorybookStateConstructor").toConstructor(CreateStorybookState);
bind<{new(): BaseState}>("CreateThumbnailStateConstructor").toConstructor(CreateThumbnailState);
bind<{new(): BaseState}>("MergeTempVideoSessionFilesStateConstructor").toConstructor(MergeTempVideoSessionFilesState);
bind<{new(): BaseState}>("StoreAndUploadDataStateConstructor").toConstructor(StoreAndUploadDataState);
Но, как вы видите, этот способ означает, что мне нужно создать отдельную функцию на своей фабрике для каждого состояния.
Есть ли способсделать одну общую привязку, которая связывает все, что связано с BaseState
, и на моем заводе сделать функцию получения параметра, которая является типом состояния, и построить экземпляр состояния на основе данного типа?