Могу ли я каким-либо образом внедрить свой класс обслуживания в несервисные аннотированные классы в NodeJS?

#javascript #node.js #typescript #dependency-injection

#javascript #node.js #typescript #внедрение зависимостей

Вопрос:

Этот класс ABCService выполняет некоторую инициализацию при запуске службы

 class ABCService {
     
   public init() : void {
     some stuff...
    }
export const service = new ABCService();
  

Я использую этот класс в качестве загрузчика

 import { MicroframeworkLoader, MicroframeworkSettings } from 'microframework-w3tec';
import { service } from '../ABCService';
export const serviceLoader: MicroframeworkLoader = (settings: MicroframeworkSettings | undefined) => {
    service.init();
};
  

Я использую этот загрузчик ServiceLoader в загрузчиках bootstrapMicroframework файла APP.ts.

 bootstrapMicroframework({
   
    loaders: [
        serviceLoader
    ],
}).then(() => ... )
.catch(error => log.error('Application is crashed: '   error));
  

Теперь у меня есть другой класс обслуживания, аннотированный с помощью @Service

 @Service()
export public class XYZService {

 constructor(private userRepository: UserRepository, private dependency2: Dependency2){
  
  }
    
   public doSomeThing(): Promise<any> {
     ....
     ....
   }
  }
  

Я хочу внедрить этот класс XYZService в ABCService, чтобы все зависимости в XYZService вводились контейнером. Как я могу этого добиться?

Ответ №1:

Я узнал, что можно получить экземпляр класса обслуживания в несервисных классах, используя typedi

 Container.get<ServiceClassType>(ServiceClassType);