Например, можно реализовать что-то вроде шаблона «Команда». Использование Injector.get по-прежнему возвращает экземпляр синглтона, так что это не сработает.
Отредактировано для пояснения, потому что временные поставщики, предложенные в комментарии и ответе, - это не то, что мне нужно: новые экземпляры необходимо создавать ad hoc, во время взаимодействия с приложением, например, при нажатии кнопки, а не при создании экземпляра компонента. В экземпляр могут быть внедрены другие службы Angular. Это связано с тем, что мы используем шаблон команды для функции отмены/повтора. Например:
@Injectable()
export class MyCommand extends Command{
constructor(private someService: SomeService)
{
}
public execute{
const value = this.someService.getSomeValue();
//doSomethingWithValue
}
}





Вот класс команды, экземпляр которого каждый раз хотелось бы создавать заново. Обратите внимание, что вам придется каждый раз создавать новый editCommandInjector, иначе он вернет тот же экземпляр, что и раньше.
@Injectable()
export class EditCommand{
constructor(private someService: SomeService, private someOtherService: SomeOtherService)
{
}
}
В вашем компоненте (или службе), где вы хотите каждый раз создавать экземпляр нового экземпляра команды, вы можете сделать следующее:
import { Component, Injector, inject } from '@angular/core';
@Component({
selector: 'app-my-component',
templateUrl: './my-component.component.html',
})
export class MyComponent{
private injector = inject(Injector);
constructor() {
}
onSomeButtonClicked(){
const editCommandInjector = Injector.create({ providers: [EditCommand], parent: this.injector });
const command = editCommandInjector.get(EditCommand);
}
}
Вы можете просто настроить поставщика для своего класса обслуживания в декораторе компонентов, например
@компонент({ ..., поставщики: [ServiceClass] })
Или
Выполните эту конфигурацию везде, где вы вводите этот класс.
Отвечает ли это на ваш вопрос? angular 2 временных провайдера вместо синглтона