2016-11-09 30 views
1

我通常可以將任何提供者注入到我的組件中,但是這僅限於組件嗎?有沒有什麼辦法來注入ActivatedRoute到這是在這種情況下使用的普通類:ng2 - 向普通班級注入提供者

app.module.ts

@NgModule({ 
    ... 
    providers: [ 
    AuthenticatedRequestOptions, 
    { provide: RequestOptions, useClass: AuthenticatedRequestOptions } 
    ], 
    ... 
}) 

認證請求,options.model.ts

@Injectable() 
export class AuthenticatedRequestOptions extends BaseRequestOptions { 
    constructor(@Inject(ActivatedRoute) public route: ActivatedRoute) { 
     super(); 
     console.log('route', this.route); 
    } 
} 

回答

1

只是它作爲參數添加到您的構造

constructor(route: ActivatedRoute, private injector: Injector) {} 

AuthenticatedRequestOptions需求要提供某處@Component()@NgModule(),......和類需要有@Injectable()裝飾

@Injectable() 
export class AuthenticatedRequestOptions extends BaseRequestOptions { 

和類需要注射本身。
如果您使用new AuthenticatedRequestOptions(...)創建實例,則不需要參與DI,因此您需要自己傳遞參數。

+0

正如我所說,這也沒有工作。注射器在我的示例中是未定義的 – parliament

+0

我擴展了我的答案。 –

+0

我使用遵循這些建議的新代碼更新了我的問題,仍然沒有注入任何內容。 – parliament

1

@Inject允許依賴注入提供者,即使他們沒有@Injectable裝飾,正確的語法是:

export class AuthenticatedRequestOptions extends BaseRequestOptions { 
    constructor(@Inject(ActivatedRoute) private route: ActivatedRoute) { 
    ... 

爲了使供應商類利用類型標註爲DI它應該有@Injectable裝飾者:

@Injectable() 
export class AuthenticatedRequestOptions extends BaseRequestOptions { 
    constructor(private route: ActivatedRoute) { 
    ... 
+0

我更新了我的問題與新代碼,遵循這些建議,仍然沒有注入任何東西。 – parliament

相關問題