2017-02-13 3 views
1

Представьте себе услугу, как LoggingService, которая имеет метод log(msg: string). С помощью инъекции с угловым 2 легко получить экземпляр службы в компоненте. Тем не менее, я не мог найти твердого решения, чтобы иметь LoggingService в любом простом классе, который не является компонентом Angular 2, сервисом и т. Д.Угловая 2 сервисная инъекция вне компонентов, услуг и т. Д.

E.g. приложение имеет файл blacklist.ts, который содержит:

export class Blacklist { 
    isBlacklisted(name: string): boolean { 
     let result = false; 

     if(value == "Alice" || value == "Bob") { 
      result = true; 
      LoggingService.log("Name'" + name + "' is blacklisted"); 
     } 

     return result; 
    } 
} 

Предположит LoggingService предусмотрен в AppModule. Как я могу получить экземпляр службы в приведенном выше примере?

+2

А почему бы вам не сделать BLACKLIST услугу? –

+1

Вы можете запрограммировать инжектор зависимостей (корневого) зависимостей (root), а затем выполнить поиск в реестре своих поставщиков для определенной службы, но это не имеет смысла в вашем примере. Если вы в обычном классе и находитесь вне углового контекста, вам будет сложно общаться с Угловыми сущностями. Как сказал JB, что случилось с превращением вашего кода в сервис? – AngularChef

ответ

-1

Импорт его в компоненте

import {LoggingService} from 'path/to/service'; 

Поместите его в конструкторе:

constructor(private logSvc: LoggingService){} 
+0

Название говорит «за пределами компонентов, услуг ...» – SilithCrowe

0

Либо LoggingService быть статический класс Так что вы можете использовать его без экземпляра Или вам нужно, и экземпляр его для вызова методов

вся цель для поддержки многократного использования использовать его как этот

import {LoggingService} from 'path/to/service' 
export class Blacklist { 
    private loggingService:LoggingService; 
    isBlacklisted(name: string): boolean { 
     let result = false; 

     if(value == "Alice" || value == "Bob") { 
      result = true; 
      this.loggingService.log("Name'" + name + "' is blacklisted"); 
     } 

     return result; 
    } 
} 
0

Я буду использовать TypeScript decorators для этой цели сейчас:

export class Blacklist { 

    @logger 
    logger: LoggingService; 

    isBlacklisted(name: string): boolean { 
     let result = false; 

     if(value == "Alice" || value == "Bob") { 
      result = true; 
      this.logger.log("Name'" + name + "' is blacklisted"); 
     } 

     return result; 
    } 
}