Для ES6 я разработал этот контейнер https://github.com/zazoomauro/node-dependency-injection
import {ContainerBuilder} from 'node-dependency-injection'
let container = new ContainerBuilder()
container.register('mailer', 'Mailer')
Затем вы можете установить, например, выбор транспорта в контейнере:
import {ContainerBuilder} from 'node-dependency-injection'
let container = new ContainerBuilder()
container
.register('mailer', 'Mailer')
.addArgument('sendmail')
Этот класс теперьгораздо гибче, поскольку вы разделили выбор транспорта из реализации и в контейнер.
Теперь, когда служба почтовых программ находится в контейнере, вы можете внедрить ее как зависимость от других классов.Если у вас есть класс NewsletterManager, подобный следующему:
class NewsletterManager {
construct (mailer, fs) {
this._mailer = mailer
this._fs = fs
}
}
export default NewsletterManager
При определении службы newsletter_manager служба почтовой рассылки еще не существует.Используйте класс Reference, чтобы указать контейнеру внедрить службу почтовой программы при инициализации менеджера новостной рассылки:
import {ContainerBuilder, Reference, PackageReference} from 'node-dependency-injection'
import Mailer from './Mailer'
import NewsletterManager from './NewsletterManager'
let container = new ContainerBuilder()
container
.register('mailer', Mailer)
.addArgument('sendmail')
container
.register('newsletter_manager', NewsletterManager)
.addArgument(new Reference('mailer'))
.addArgument(new PackageReference('fs-extra'))
Вы также можете настроить контейнер с файлами конфигурации, такими как файлы Yaml, Json или JS
Сервисный контейнер может быть скомпилирован по разным причинам.Эти причины включают проверку на наличие потенциальных проблем, таких как циклические ссылки и повышение эффективности контейнера.
container.compile()