частично вводить компоненты в машинописи (angularjs) - PullRequest
0 голосов
/ 17 декабря 2018

в настоящее время я использую $inject для ввода компонентов в мой контроллер:

export class MyClass{

    public static $inject = [
        "$depedencyA",
        "$depedencyB",
        "$depedencyC"   
    ];

    constructor(
            private $depedencyA: IDependencyA,
            private $depedencyB: IDependencyB,
            private $depedencyC: IDependencyC         
        )
        {

        }

}

Это прекрасно работает при создании экземпляра MyClass, например let myClassInstance=new MyClass();

Но что если яхотите передать зависимость, которая не может быть напрямую введена самим классом?

let myClassInstance=new MyClass(anotherDependency);

Ну, конечно, мне нужно расширить MyClass, чтобы принять этот параметр в конструкторе

constructor(
            private $depedencyA: IDependencyA,
            private $depedencyB: IDependencyB,
            private $depedencyC: IDependencyC,
            private $anotherDependency: any
        )
        {

        }

.. но тогда внедрение больше не может работать, потому что массив параметров больше не соответствует фактической сигнатуре конструктора.Как мне обойти это?

1 Ответ

0 голосов
/ 18 декабря 2018

Это не сработает: let myClassInstance=new MyClass();, потому что вы не позволяете angular связывать зависимости для вас.Теперь вы несете ответственность за предоставление всех зависимостей для этого класса, которых у вас нет в вашем примере.

Если вы сами обновляете эти объекты, то при добавлении другой зависимости ничего не изменится - вы будетеЯ также должен предоставить это вручную.

Вы не можете сделать частичную инъекцию с помощью DI angularjs.Вам нужно будет либо создать новый объект самостоятельно и предоставить все зависимости, либо вам придется зарегистрировать новую зависимость в качестве службы какого-либо рода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...