Я пытаюсь предоставить услугу, отличную от моей ConfigService
.
Проблема, с которой я сталкиваюсь, заключается в том, что внедряемая модель мангуста не возвращает никаких значений при выполнении таких методов запроса, как findOne()
(результат null
) или countDocuments()
(результат 0
).
Мои классы обслуживания определены следующим образом:
export class BaseService {
constructor(@InjectModel('Cat') public readonly catModel: Model<Cat>) {}
createService(option: string) {
if (option === 'OTHER') {
return new OtherService(this.catModel);
} else if (option === 'ANOTHER') {
return new AnotherService(this.catModel);
} else {
return new BaseService(this.catModel);
}
}
async findOne(id: string): Promise<Cat> {
return await this.catModel.findOne({_id: id});
}
async count(): Promise<number> {
return await this.catModel.countDocuments();
}
testClass() {
console.log('BASE SERVICE CLASS USED');
}
}
@Injectable()
export class OtherService extends BaseService {
constructor(@InjectModel('Cat') public readonly catModel: Model<Cat>) {
super(catModel);
}
testClass() {
console.log('OTHER SERVICE CLASS USED');
}
}
@Injectable()
export class AnotherService extends BaseService {
constructor(@InjectModel('Cat') public readonly catModel: Model<Cat>) {
super(catModel);
}
testClass() {
console.log('ANOTHER SERVICE CLASS USED');
}
}
Это позволяет мне получить правильный сервис от моего провайдера (testClass()
печатает ожидаемую строку).Мой провайдер выглядит так:
export const catProviders = [
{
provide: 'CatModelToken',
useFactory: (connection: Connection) => connection.model('CAT', CatSchema),
inject: ['DbConnectionToken'],
},
{
provide: 'BaseService',
useFactory: (ConfigService: ConfigService, connection: Connection) => {
const options = ConfigService.get('SERVICE_TYPE');
let model = connection.model('CAT', CatSchema);
return new BaseService(model).createService(options);
},
inject: [ConfigService, 'CatModelToken', 'DbConnectionToken'],
}
];
Так что мой вопрос состоит из двух частей:
- Есть ли лучший способ справиться с созданием правильного класса и избежать необходимостисоздать экземпляр
BaseService
с единственной целью вызова createService()
? - Как правильно внедрить модель мангуста во вновь созданный сервис?
Я также не могуиспользуйте пример useClass
из документации, так как мне нужно иметь возможность ввести ConfigService
.