Аурелия вводит несоответствие?

#aurelia

#aurelia

Вопрос:

Если я внедряю модули с помощью одной инструкции inject, это работает. Если я введу модули с помощью трех инструкций inject, приложение не загрузится.

Я бы ожидал, что оба способа эквивалентны.

     import {AuthService} from 'aurelia-auth';
    import {bindable, inject, Aurelia} from 'aurelia-framework';
    import {ValidationControllerFactory, ValidationController, ValidationRules} from 'aurelia-validation';
    import {BootstrapFormRenderer} from './bootstrap-form-renderer';

    //Works
    //@inject(Aurelia, AuthService, ValidationControllerFactory)

    //Does not work
    @inject(Aurelia)
    @inject(AuthService)
    @inject(ValidationControllerFactory)

    export class Login {
      constructor(aurelia, authService, controllerFactory) {
  

Ответ №1:

Множественные вызовы inject декоратора не будут работать из-за того, как реализован декоратор. Что делает декоратор ввода, так это создает статическую функцию inject() в классе. Таким образом, множественные вызовы декоратора ввода будут просто перезаписывать свойство static inject.

Ответ №2:

Вы можете использовать static inject() для нескольких подобных инъекций:

 export class SampleModel {

    static inject() { return [DatabaseService, AuthService, EventAggregator]; }

    constructor(db, auth, events){
      this.db = db;
      this.auth = auth;
      this.events = events;
    }
}
  

Вы можете прочитать больше информации о внедрении зависимостей в aurelia cheat shit:http://aurelia.io/hub.html#/doc/article/aurelia/framework/latest/cheat-sheet/3

Комментарии:

1. Хорошо, спасибо, так что множественные вставки — это старый стиль. Есть ли ссылка на документацию, в которой указано, что необходимо выполнить однократное внедрение?

2. @user905374, ты можешь прочитать о внедрении в aurelia cheat shit: aurelia.io/hub.html#/doc/article/aurelia/framework/latest /…

3. Несколько inject декораторов — это не «старый стиль», они никогда не работали. Что делает inject декоратор, так это создает static inject() функцию в классе. Таким образом, множественные вызовы inject декоратора будут просто перезаписывать static inject свойство.

4. @AshleyGrant Отлично, это то, что я искал. Если вы добавите свой комментарий в качестве ответа, я приму его.