Облачный литейный плагин или как-то решает проблемы пользовательского интерфейса для микросервисов? PCF генерирует составной пользовательский интерфейс?
blockquote>Нет, платформа не делает этого за вас. Он обрабатывает только запросы маршрутизации к вашим приложениям.
Около 12 Microservice будет отображать HTML, и теперь мы хотим знать, как мы можем объединить все эти службы в один пользовательский интерфейс и представить его клиенту.
blockquote>Возможно, вы захотите использовать прокси-приложение перед вашими микросервисами. Прокси будет отвечать за представление единого интерфейса для ваших клиентов и объединение всех базовых сервисов вместе.
Netflix Zuul / Spring Cloud Zuul или Spring Cloud Gateway могут помочь в этом, если вы используете Java. Я также вижу, что люди используют Nginx в качестве обратного прокси-сервера для подобных вещей.
В конце дня вам нужно будет выяснить, что работает для ваших конкретных микросервисов & amp; приложения на стороне клиента, хотя. Я не думаю, что кто-то может дать вам окончательный ответ на ваш вопрос, по крайней мере, не намного больше информации.
Если Вы имеете linq доступный, можно сделать
var ListOfA = ListOfB.Cast<A>().ToList();
Вы не можете сделать этого. Для понимания, почему это не позволяется вообразите то, что произошло бы если Add
был обращен a List<Derived>
после того, как это было брошено к a List<Base>
.
Кроме того, ответы, подразумевающие, что C# 4.0 будет отличаться, являются неправильными. Список никогда не будет изменяться, чтобы позволить Вам делать это. Только IEnumerable
будет - потому что это не позволяет объектам быть добавленными к набору.
Обновление: причина это работает в решении, для которого Вы пошли, состоит в том, потому что Вы больше не передаете тот же список. Вы создаете совершенно новый список, который является копией оригинала. Поэтому я спросил об изменении списка; если MethodC
вносит изменения в количество объектов в списке, те изменения были бы внесены в копию, не исходный список.
Я думаю, что идеальное решение для Вас следующие:
public abstract class A
{
public void MethodC<TItem>(List<TItem> list) where TItem : A
{
foreach (var item in list)
item.CanBeCalled();
}
public abstract void CanBeCalled();
}
public class B : A
{
public override void CanBeCalled()
{
Console.WriteLine("Calling into B");
}
}
class Program
{
static void Main(string[] args)
{
List<B> listOfB = new List<B>();
A a = new B();
a.MethodC(listOfB);
}
}
Заметьте, как с этим решением можно передать a List<B>
непосредственно к MethodC
не будучи должен сделать то странное преобразование на нем сначала. Так никакое ненужное копирование.
Причина это работает, состоит в том, потому что мы сказали MethodC
принять список чего-либо, что получено из A
, вместо того, чтобы настоять, чтобы это был список A
.
Вы обращаетесь к отсутствию ковариантности в текущей версии C#. Вот один способ сделать его:
listOfB.Cast<A>();