Я пытаюсь внедрить модель мангуста на уровне свойств, чтобы класс мог быть создан в другом месте с помощью new Myclass()
.Этот шаблон делает возможным заполнение разных баз данных, используя только один сервис.Возможно ли это сделать?
Мой код
Документы NestJS обеспечивают возможность внедрения уровня свойства в некоторых случаях, используя @Inject()
на уровне свойства,Пытаясь воспроизвести этот шаблон, я написал следующий класс:
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { IArticle } from 'article/interfaces/article.interface';
export class ArticleSeedService {
@InjectModel('Article') private readonly articleModel: Model<IArticle>;
seed(article) {
return new this.articleModel(article);
}
}
Затем этот класс создается.Цель этого шаблона - включить заполнение различных коллекций, пытаясь сохранить мой код DRY :
import { ArticleSeedService } from './article/article-seed.service';
import { ISeedService } from './interfaces/seed-service.interface';
export class SeedServiceFactory {
private seedService: ISeedService;
private build(collectionName: string) {
if (collectionName === 'articles') {
this.seedService = new ArticleSeedService();
return;
} else {
throw new Error('Unable to seed');
}
}
/*
other methods calling this.build(collectionName)
*/
}
Наконец, фабрика импортируется в тестовый модуль, который также импортируетмой проверенный модуль.Таким образом, тестовый модуль должен предоставлять модель изделия, поскольку она импортируется в тестируемый модуль: MongooseModule.forFeature([{name: 'Article', schema: ArticleSchema}])
.
Тестовый модуль создается в моем тестовом файле:
const module = await Test.createTestingModule({
imports: [
MongooseModule.forRoot(process.env.MONGODB_URL,
{ useNewUrlParser: true, useFindAndModify: false, useCreateIndex: true },
),
ArticleModule,
SeedServiceFactory,
],
providers: [
DocumentNotFoundExceptionFilter, AllExceptionFilter, ValidationPipe,
SeedServiceFactory,
],
})
.compile();
seedServiceFactory = module.get<SeedServiceFactory>(SeedServiceFactory);
Когдаbuild
метод SeedServiceFactory вызывается, модель не внедряется: его значение равно undefined
.Я что-то упускаю из-за того, как DI работает в этом случае?
Чтобы подвести итог
Могу ли я @InjectModel()
в NestJS на уровне свойств вместо того, чтобы делать это в конструкторе?
Спасибо за помощь!