Angular 2 Inject Dependency за пределами конструктора
В настоящее время я копаюсь в DI в Angular 2. Я реализую REST-клиент, используя общие подтипы для конкретных типов данных, например:
class RESTClient<T>{
constructor() {
var inj = ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS]);
this.http = inj.get(Http);
this.conf = RESTConfiguration;
}
}
class BookClient extends RESTClient<Book>{
constructor(){
// since I dont want to inject the HTTP Providers here, I'm using a custom injector in the super class
super();
}
}
class WriterClient extends RESTClient<Writer>{
...
...
}
Итак, насколько я понимаю, будет одна служба http, совместно используемая всеми RESTClients, внедренными суперклассом REST-Service.
Теперь я хочу иметь класс RESTConfiguration как таковой:
@Injectable()
export class RESTConfiguration {
get baseURL() {
return this._baseURL;
}
set baseURL(value) {
alert("sets value to"+value);
this._baseURL = value;
}
private _baseURL;
}
Это должно быть настроено в основном приложении как таковое:
initializeApp(){
this.restconf.baseURL = "http://localhost:3004/";
}
bootstrap(MyApp, [RESTConfiguration]).then();
Теперь мне интересно, как внедрить один единственный экземпляр моего RESTConfiguration в класс RESTService, не передавая его конструктору, который я хочу оставить без аргументов, чтобы уменьшить дублирование кода и избежать проблем с обобщениями в машинописи.
В приведенном выше примере (первый фрагмент кода) я пытаюсь внедрить свою конфигурацию, используя созданный мной ReflectiveInjector, который предоставляет мне пользовательский экземпляр моей конфигурации.
Я думал о нескольких решениях:
Получение доступа к «глобальному инжектору» приложений, сделав его доступным с помощью службы или некоторого свойства статического класса
Реализация дополнительной синглтон-логики в моей конфигурации
найти способ использовать метод угловых инъекций за пределами конструктора?
Есть ли ошибки в моем мышлении или я неправильно использую структуру DI?