تزریق وابستگی - تزریق وابستگی Aurelia Typescript - نمونهسازی HTTP fetch
من در عبور از مثالهای پایهای در اسکلت Aurelia TS در مورد تزریق وابستگی به مشکل برخوردهام. اولین ابهام این است که یک Singleton را ابتدا کجا باید نمونهسازی کرد. برای مثال، در نمونه اسکلت گیتهاب، آنها HttpClient را در users.ts نمونهسازی میکنند:
constructor(public http: HttpClient) {
http.configure(config => {
config
.useStandardConfiguration()
.withBaseUrl('https://api.github.com/');
});
}
اما من نمیخواهم این کار را در هر کلاس انجام دهم، بنابراین فرض کردم که کد را در main.ts قرار دهم چون وقتی برنامه اجرا میشود، آنجا اجرا میشود. اما main.ts سازنده ندارد و وقتی تلاش میکنم @inject(HttpClient) را اضافه کنم، خطا میدهد. آیا main.ts مکان مناسبی برای قرار دادن این کد است و اگر هست، چگونه باید این کار را انجام دهم؟
ایدهای داری؟
پاسخ شماره ۱
شما میتوانید از متد 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/');
});
}
پاسخ شماره ۲
من یک سؤال مشابه برای JS پیدا کردم (https://github.com/aurelia/dependency-injection/issues/73) و آن را برای Typescript اصلاح کردم و به نظر میرسد که کار میکند. این چیزی است که برای هر کسی که به آن نیاز دارد، دارم. مطمئن نیستم که بهترین پاسخ باشد اما کار میکند:
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', '');
});
