Angular 6 внедрение службы в класс без использования конструктора - PullRequest
0 голосов
/ 19 февраля 2020

Использование Angular 6 и Typescript 2.7. У меня есть класс с конструктором, которому я передаю аргументы, когда создаю экземпляр из контроллера. Этот класс также имеет сервис, который должен быть введен. Но затем контроллер, который создает экземпляр, должен предоставить службу в качестве параметра. Это распространено или есть способ просто внедрить службу в классе, а не конструктор. В других статьях я читал, что конструктор должен использоваться только для внедрения зависимостей.

Итак, у меня есть класс конфигурации, который принимает простые строковые параметры.

export class Configuration{
    //public uiService: UiService;
    public configName:string;
    public configType: ConfigType;
    public shape:any;

    constructor(_configName: string, _configType: ConfigType){
        this.configName = _configName;
        this.configType = _configType;
....

Я создаю новый экземпляр этого класса из моего контроллера следующим образом:

let config = new Configuration("NEWconfiguration", configType);

У меня есть общий сервис с служебными функциями, которые мне нужно использовать в классе конфигурации. Читая здесь и другие сайты, я вижу, что это должно быть введено через конструктор. Тогда мой конструктор конфигурации включит новый параметр для службы, а затем контроллер добавит его. Но служба не используется в контроллере, поэтому я не хочу включать ее туда.

Есть ли в классе Configuration способ доступа к службе без использования конструктора? Или это плохая практика. Я думаю, что я мог бы создать экземпляр службы в классе конфигурации или сделать функции в службе stati c, но тогда я не использую внедрение зависимостей. Это имеет значение?

1 Ответ

0 голосов
/ 19 февраля 2020

Недавно я столкнулся с похожей проблемой, когда мне пришлось создать несколько экземпляров одного и того же класса, что невозможно с Angular DI, который по умолчанию создает синглтоны. Однако экземпляры классов действительно имели зависимости от других служб в моем приложении.

Я решил это путем внедрения зависимостей в мой контроллер и создания экземпляров классов с использованием их конструкторов без DI.

Дайте мне знать, достаточно ли вышеуказанного, если нет, я могу добавить пример кода для улучшения ясности.

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