Предположим, у вас есть такой класс с прикрепленным к нему декоратором Router
.
@Router
class AuthRouter {
constructor(private cacheService: CacheService) {}
}
Как получить типы параметров конструктора из декоратора Router
? Предположим, мы сохранили синглтон CacheService
, к которому мы можем получить доступ, если знаем имя класса «CacheService».
function Router(target) {
// somehow get the constructor class name
const dependencyNames = 'CacheService' // an array if multiple args in constructor
// getSingleton is a function that will retrieve
// a singleton of the requested class / object
return new target(getSingleton(dependencyNames))
}
Поэтому всякий раз, когда мы используем AuthRouter
, в него уже будет введено CacheService
.
target.toString()
для имен аргументов, а затем выполнить одноэлементную инъекцию. - person Jevgeni   schedule 18.04.2017Angular
делает это внутри. Является ли возврат нового конструктора просто принципом проектированияDecorators
или он будет иметь негативные побочные эффекты? - person borislemke   schedule 18.04.2017reflect-metadata
. - person borislemke   schedule 18.04.2017constructor
класса, или это просто предлагается концепциейDecorator
в целом (также вpython
)? Дело в том, что приведенный выше код работает как задумано, даже если я возвращаю экземпляр класса вместо нового конструктора. - person borislemke   schedule 18.04.2017new AuthRouter()
. Я сомневаюсь, что ваш код действительно работает так, как вы задумали. - person Nitzan Tomer   schedule 18.04.2017router.use('/auth', new AuthRouter())
, я просто делаюrouter.use('/auth', <any>AuthRouter)
‹- обратите внимание, что я не повторно создаю экземпляр украшенного класса. Спасибо за помощь, я решил не идти по этому пути и нашел что-то более привлекательное с декораторами - person borislemke   schedule 18.04.2017--emitDecoratorMetadata
, вы можете использоватьReflect
API для доступа к примерному списку типов параметров. Однако на самом деле они не являются типами, и вам следует с осторожностью полагаться на этот механизм. - person Aluan Haddad   schedule 23.04.2017