Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Angular 2. dependency injection, как настраивать в единой точке ? / 6 сообщений из 6, страница 1 из 1
17.04.2017, 10:47
    #39439525
TsHeloWorlder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Angular 2. dependency injection, как настраивать в единой точке ?
Разбираюсь с DI в ангуляре. Не могу найти то, что мне нужно.

Вот кусок кода, с примером работы с DI.
Код: css
1.
2.
3.
4.
5.
@Component({
  selector: 'hero-of-the-month',
  templateUrl: './hero-of-the-month.component.html',
  providers: [{ provide: MinimalLogger, useExisting: LoggerService }]
})



Мне не нравится, что класс-реализация настраивается в самом компоненте. Во первых это не удобно сопровождать. Если я решу сменить логгер, то придется лазить по всем файлам (и ничего не забыть, не пропустить) в поисках конфигурации логгера и везде менять ? Во вторых о какой слабой связанности можно говорить, если компонент вынужден знать про классы реализующие нужные ему сервисы. Где возможно получить интерфейс и работать с ним, не разбираясь о конкретной реализации ?

Для примера возьмем реализацию DI во взрослом языке, на примере Autofac:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
var builder = new ContainerBuilder();
 
// Register individual components
builder.RegisterInstance(new TaskRepository())
       .As<ITaskRepository>();
builder.RegisterType<TaskController>();
builder.Register(c => new LogManager(DateTime.Now))
       .As<ILogger>();
 
// Scan an assembly for components
builder.RegisterAssemblyTypes(myAssembly)
       .Where(t => t.Name.EndsWith("Repository"))
       .AsImplementedInterfaces();
 
var container = builder.Build();



Либо все настолько плохо, либо я просто не нашел нормального примера. Подскажите как в Ангуляре сделать централизованную точку настройку зависимостей.
...
Рейтинг: 0 / 0
17.04.2017, 12:35
    #39439608
TsHeloWorlder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Angular 2. dependency injection, как настраивать в единой точке ?
Разобрался. Нужно в @NgModule прописать

Код: javascript
1.
2.
3.
providers: [            
      { provide: MyService, useClass: MyService1 }
  ],



В компоненте просто в конструктор передавать
Код: javascript
1.
  constructor(myService: MyService)



В Ангуляре инжекторы зависимостей передаются по дереву компонентов. Таким образом можно законфигурировать все в одной точке/файле NgModule.
...
Рейтинг: 0 / 0
18.04.2017, 12:13
    #39440132
Агнец за бортом
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Angular 2. dependency injection, как настраивать в единой точке ?
А можно создавать свой экземпляр сервиса на уровне компонента, здорово, чо.
...
Рейтинг: 0 / 0
19.04.2017, 12:40
    #39440828
TsHeloWorlder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Angular 2. dependency injection, как настраивать в единой точке ?
Агнец за бортом,

Прямо в коде создавать объект через new, а как зависимости создаваемого объекта в ручную разруливать ? Отказаться от DI ? Ну неееет уж )
...
Рейтинг: 0 / 0
19.04.2017, 13:12
    #39440858
Агнец за бортом
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Angular 2. dependency injection, как настраивать в единой точке ?
TsHeloWorlderАгнец за бортом,

Прямо в коде создавать объект через new, а как зависимости создаваемого объекта в ручную разруливать ? Отказаться от DI ? Ну неееет уж )

Ты вообще меня не понял.

Можно создать синглтон на уровне всего приложения, а можно создать экземпляр сервиса на уровне компонента, и это то, чем ты и занимался в первом посте.
...
Рейтинг: 0 / 0
19.04.2017, 13:45
    #39440889
TsHeloWorlder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Angular 2. dependency injection, как настраивать в единой точке ?
Ну с этим то я уже разобрался, написав "В Ангуляре инжекторы зависимостей передаются по дереву компонентов. Таким образом можно законфигурировать все в одной точке/файле NgModule.".
Поэтому запоздалая критика первого поста меня и сбила с толку.

Да я знаю уже, что если в компоненте переопределить провайдер, то он будет создан для компонента, а не взят от родителя.
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Angular 2. dependency injection, как настраивать в единой точке ? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]