Angular 2 @Injectable () - как это работает

Я пытаюсь понять необходимость добавления украшения @Injectable() в сервисах в angular 2.

Из документации: https://angular.io/docs/ts/latest/guide/dependency-injection.html

Почему бы нам не добавить @Injectable () в HeroesComponent? Мы можем добавить его, если действительно захотим. В этом нет необходимости, потому что HeroesComponent уже украшен @Component. TypeScript генерирует метаданные для любого класса с декоратором, и любой декоратор подойдет.

Таким образом, в основном вам нужно добавить @Injectable() только в том случае, если другое украшение недоступно, потому что, если есть украшение любого доступного типа, компилятор машинописного текста автоматически сгенерирует информацию о зависимостях на основе переменных, которые вы передали в конструктор, например: constructor(private logger: Logger)

Это правильно? Спасибо


person Doua Beri    schedule 04.01.2016    source источник
comment
Я смеялся над @alexpods. А как насчет того, чтобы добавить это в качестве ответа: D? Чтобы немного дополнить, вы можете прочитать этот комментарий, весь вопрос интересно, но не полностью связано с вашим вопросом.   -  person Eric Martinez    schedule 05.01.2016


Ответы (1)


Я думаю, что название немного странное, и я действительно не понимаю, почему они говорят вам добавить его для лучшей практики. Если добавление его в каждый класс - лучшая практика, я не понимаю, зачем это вообще нужно. Было бы проще, если бы фреймворк проверял каждый класс, нужен ли конструктору вводимый материал или нет. Эту проблему можно было бы решить с помощью свойства командной строки в машинописном тексте, чтобы всегда генерировать (имитировать) метаданные.

Совет всегда добавлять его, я думаю, аналогичен тому, чтобы компилятор всегда добавлял метаданные (что невозможно, насколько я знаю). Вы также можете (с бдительностью) только (и всегда) добавлять его к классам, которым нужно вводить материал, даже если у них есть другой декоратор. Это, вероятно, было бы наиболее явным решением, но эй, небрежность может быть как плохо, так и хорошо. Вы будете судьей в этом деле.

TL; DR Если у вас нет других декораторов И вы, если ваш конструктор нуждается в внедрении сервисов и т. д., Тогда он вам нужен.

person Per Hornshøj-Schierbeck    schedule 05.01.2016
comment
Чтобы уточнить, это не обязательно для классов, у которых есть другие декораторы классов, расширенные с Injectable (Component и т. Д.) или для классов, свойства конструктора которых аннотированы с помощью Inject (например, в коде ES.next). - person Estus Flask; 19.08.2016