Open
Description
Implement dependency injection decorator
import { BaseInject, createInjector } from 'prismy-di'
const PRODUCTION = process.env.NODE_ENV === 'production'
const ServiceTypes = {
MailService: 'MailService',
NotificationService: 'NotificationService'
}
abstract class MailService {
}
class LiveMailService implements MailService {
}
class MockMailService implements MailService {
}
class NotificationService {
constructor(@BaseInject(ServiceTypes.MailService) mailer: MailService) {
...
}
}
const container = {
[ServiceTypes.MailService]: PRODUCTION ? LiveMailService : MockMailService,
[ServiceTypes.NotificationService]: NotificationService
}
const {
Inject,
injector
} = createInjector(container)
class MyHandler {
handle(@Inject(ServiceTypes.NotificationService) notifier: NotificationService) {
...
// Or
const notifier = injector.inject(ServiceTypes.NotificationService)
// Or
const notifier = injector.instantiate(NotificationService)
}
}
Metadata
Metadata
Assignees
Labels
No labels