2016-06-06 5 views
2

У меня возникли проблемы с основными примерами в скелете Aurelia TS относительно инъекции зависимостей. Первая путаница заключается в том, где сначала создать экземпляр одноэлементного кода. Например, в GitHub образца скелета они инстанцирует HttpClient в users.ts:Aurelia Typcript DI - экземпляр HTTP-выборки

constructor(public http: HttpClient) { 
    http.configure(config => { 
    config 
    .useStandardConfiguration() 
    .withBaseUrl('https://api.github.com/'); 
    }); 
} 

Но я не хочу делать это в каждом классе, поэтому я предположил, что я бы поставил код в main.ts так который запускается при запуске приложения. Но у main.ts нет конструктора, и когда я пытаюсь включить @inject (HttpClient), он не работает. Является ли main.ts правильным местом для размещения этого кода, и если да, то как мне это сделать?

Любые идеи?

ответ

4

Вы можете использовать метод container.get на aurelia объекте использовать контейнер инъекции зависимостей внутри main.ts:

main.ts

import { HttpClient } from 'aurelia-http-client'; 

export function configure(aurelia) { 

    let httpClient = aurelia.container.get(HttpClient); 
    http.configure(config => { 
     config 
     .useStandardConfiguration() 
     .withBaseUrl('https://api.github.com/'); 
     });  
} 
+0

как и подписываются –

2

Я нашел аналогичный вопрос для JS (https://github.com/aurelia/dependency-injection/issues/73) и модифицировал его для машинописного текста и, похоже, работает. Вот что я имею для тех, кто в этом нуждается. Не уверен, что это самый лучший ответ, но он работает:

main.ts

bootstrap((aurelia: Aurelia): void => { 
    aurelia.use 
    .standardConfiguration() 
    .developmentLogging(); 

    var http: HttpClient = new HttpClient(); 
    http.configure(config => { 
    config 
    .useStandardConfiguration() 
    .withBaseUrl('https://api.github.com/'); 
    });  
    aurelia.container.registerInstance(HttpClient, http); 

    const rootElem = document.body; 
    aurelia.start().then(() => aurelia.setRoot('app', rootElem)); 
    rootElem.setAttribute('aurelia-app', ''); 
}); 
Смежные вопросы