Версия NestJs для модулей - PullRequest
1 голос
/ 30 апреля 2019

Я хотел бы добавить версию для своих модулей, но я не знаю, как я могу это сделать. Я пытался создать общий module.ts, но одно и то же имя сервисов убило каждого из нас. Я пробовал разные module.ts для версий, это было лучше, но сервисы с одинаковыми именами не работали.

Это моя последняя структура: тест-модуль

1.0
   controllers
      test.controller.ts
   services
      test.service.ts
   test.module.ts
1.1
   controllers
      test.controller.ts
   services
      test.service.ts
   test.module.ts

Это мои тестовые сервисы для версий:

import * as _ from 'lodash';
import { Injectable } from '@nestjs/common';

@Injectable()
export class TestService {
  public test() {
    return '1.0'; // and 1.1 in 1.1 directory
  }
}

Это мой module.ts:

import { Module, Logger } from '@nestjs/common';

import { TestModule as DorotTwo } from 'test-module/1.1/test.module';
import { TestModule as DorotOne } from 'test-module/1.0/test.module'

@Module({
  controllers: [ProtobufController],
  providers: [],

  imports: [
    DorotTwo,
    DorotOne,
  ],
})
export class ProjectModule {
  constructor() {
    Logger.log('App initialized');
  }
}

Это простой тестовый контроллер в проекте, который хочет использовать модули. Испытанный импорт TestService из 1.0 или 1.1, но ответ тестовой функции всегда равен 1.0, потому что это последний элемент в импорте.

@Controller()
export class ProtobufController {
  constructor(private readonly testService: TestService) {
    console.log(this.testService.test()); // Always 1.0
  }
.....

Это работает, если я использую полные разные имена для сервисов, например (например: UserAuthenticationService10, RegisterAuthenticationService10), но это ужасно, и если я забуду переименовать его в новой версии, он будет перезаписан.

Существует ли пример, где я могу прочитать, как я могу создать этот версионный модуль?

1 Ответ

0 голосов
/ 01 мая 2019

Будет ли использование пользовательских провайдеров подходящим решением для вас?

Пример:

// 1.0
@Module({
  providers: [
    { provide: 'TestService_1.0', useClass: TestService }
  ]
})
export class TestModule {}

// 1.1
@Module({
  providers: [
    { provide: 'TestService_1.1', useClass: TestService }
  ]
})
export class TestModule {}

// Then

@Controller()
export class ProtobufController {
  constructor(
    @Inject('TestService_1.0') private readonly testService_10,
    @Inject('TestService_1.1') private readonly testService_11
  ) {
    console.log(this.testService_10.test());
    console.log(this.testService_11.test());
  }
}

Я, очевидно, не проверял это, и вы должны адаптировать его к своему сценарию использования.Я предлагаю вам взглянуть на https://docs.nestjs.com/fundamentals/custom-providers.

...