2016-11-09 1 views
1

Я могу, как правило, вводить любого поставщика в мои компоненты, но ограничивается ли это компонентами? Есть ли способ, чтобы придать ActivatedRoute в обычный класс, который используется в этом контексте:ng2 - инъекция поставщика в обычный класс

app.module.ts

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

аутентифицированных-Request-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