تایپاسکریپت - Angular DI: تزریق یک توکن مقدار به ارائهدهندهی کارخانهای


آیا امکان دارد یک InjectionToken را در یک ارائهدهنده کارخانهای تزریق کرد:

در حال حاضر، من چنین کدی نوشتهام:

export const HOST_TOKEN = new InjectionToken<string>("host");

let configDataServiceFactory = (userService: UserService, host: string) => {
    return new Config("host", 8080, userService.getUser(), userService.getPasswd());
};

export let configDataServiceProvider =
{
    provide: CONFIG_API,
    useFactory: configDataServiceFactory,
    deps: [UserService, HOST_TOKEN]
};

به ماژول من:

@NgModule(
  providers: [
    {provide: HOST_TOKEN, useValue: "allianz-host"},
    configDataServiceProvider
  ]
)

با این حال، انگولار در حال تزریق مقدار "host" به configDataServiceProvider است، به جای "host-allianz"

ایدهای داری؟

پاسخ شماره ۱

بله، شما میتوانید این کار را با استفاده از تزئینکننده @Inject مانند زیر انجام دهید، که به شما کمک میکند وابستگی مرتبط را از ظرف DI استخراج کنید.

let configDataServiceFactory = (userService: UserService, @Inject(HOST_TOKEN) host: string) => {
    return new Config(host, 8080, userService.getUser(), userService.getPasswd());
};

می توانید گزینه زیر را نیز در نظر بگیرید. اساساً، همه InjectionTokenهای ثبت شده از Injector برنامه قابل بازیابی خواهند بود، که می توان با فراخوانی روش get در نمونه injector و ارسال InjectorToken به دست آورد.

export const HOST_TOKEN = new InjectionToken<string>("host");

let configDataServiceFactory = (userService: UserService, injector: Injector) => {
    let host = injector.get(HOST_TOKEN); //retrieved token from injector
    return new Config(host, 8080, userService.getUser(), userService.getPasswd());
};

export let configDataServiceProvider =
{
    provide: CONFIG_API,
    useFactory: configDataServiceFactory,
    deps: [UserService, Injector]
};

مدارک اینجا