Как я должен разработать библиотеку классов, чтобы допускать МОК, но не зависеть от конкретного контейнера

Попробуйте использовать оператор Элвиса в цикле отображения:

<tr *ngFor="let value of default">
   <td>{{ value?.userId }}</td>
   <td>{{ value?.title }}</td>
</tr>

?. после item (в данном случае value) гарантирует, что Angular не будет пытаться отрисовать data , пока данные не отобразятся, поэтому value?.userId будет работать там, где value.userId потерпит неудачу, так как значение не определено при визуализации представления, а Angular не знает атрибута .userID до завершения выборки по которому уже выкинута ошибка.

Кроме того, при использовании http и result.json () вы получите один массив ваших объектов данных, поэтому вам не нужно использовать его как object []; Я также был бы склонен печатать значения как любые [] и посмотреть, не сработает ли это.

public values: any[];

constructor(private http: Http) {
  this.http.get('http://192.168.10.100/api/values').subscribe(result => { //Calling the web api here as json
    this.values = result.json();
    }, error => console.error(error));
}
8
задан Daniel 9 February 2009 в 15:25
поделиться

2 ответа

Передайте свойство в конструкторе для простых сценариев.

Для большего количества complexe случаев используйте интерфейс контейнера МОК, обеспечьте реализацию по умолчанию, но сделайте это достаточно простым так, чтобы это могло быть реализовано с любым contianer.

CommonServiceLocator является таким видом интерфейса.


Редактирование:

Я продвинул бы другой дизайн теперь, когда сделает CommonServiceLocator бесполезным, и сделал бы общий опыт Ваших пользователей библиотеки лучше:

Вы выбираете контейнер МОК, который имеет все необходимые функции Ваших внутренних требований библиотеки и Вас ILMerge это как внутренние так, чтобы Ваши пользователи библиотеки не видели его. Пользователи не должны знать, что библиотека использует контейнер.

Необходимо затем обеспечить две основных точки расширения: Конфигурация - способ обеспечить пользовательскую реализацию зависимостей (например, Регистратор...) Фабрики - если Ваша библиотека должна инстанцировать объекта пользователей, позвольте указывать фабрику так, чтобы Ваши пользователи могли сцепить его. Таким образом, они могут использовать свой собственный контейнер, чтобы инстанцировать и ввести их объекты.

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

Контейнер МОК, спрятаться

Контейнер МОК, пойдите скрывающий элемент (часть 2)

5
ответ дан 5 December 2019 в 22:20
поделиться

Если количество зависимостей является довольно небольшим, можно просто передать их в способом конструктора. Тем путем у Ваших потребителей есть полный выбор по тому, как создать Ваши объекты.

Свойства/методы set или пользовательские объекты инициализации являются альтернативными возможностями и покрывают другие области в спектре дизайна.

1
ответ дан 5 December 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: