2016-01-01 1 views
1

Я тестирую приложение UWP, и я хочу использовать прокси-сервер для использования службы WCF. У меня есть прокси-сервер, который является библиотекой для .net 4.6, но я не могу добавить этот проект в качестве ссылки в проект универсального приложения. Это нормально, потому что это библиотека для .net 4.6.Я не могу добавить ссылку на ServiceModel в проект портативной библиотеки

Итак, я пытаюсь создать переносимую библиотеку, и у меня есть два варианта создания портативной библиотеки. Этот вариант позволяет мне сказать, какие цели я могу использовать. Я выбираю .net 4.6 и windows universal 10.0. Проблема в том, что я не могу добавить ссылку на System.ServiceModel, что мне нужно использовать прокси.

Другой вариант - портативная библиотека для универсальных окон. В этом случае я не могу выбрать целевые проекты, это имеет смысл, потому что это только для универсальных приложений. В этом случае я могу добавить ссылку на System.ServiceModel.

Я знаю, что в портативной библиотеке я могу использовать библиотеки целевого проекта более ограничительными, в этом случае я предполагаю, что это универсальные окна, нет .net 4.6. Но почему, почему я могу добавить ссылку в переносную библиотеку для универсальных приложений, а не в переносимую библиотеку, в которой я использую .net?

Я хотел бы иметь универсальную портативную библиотеку, чтобы иметь возможность использовать прокси-сервер в приложениях WPF и приложениях с универсальными окнами.

Спасибо.

ответ

1

К сожалению, не существует простой взаимосвязи между различными целевыми структурами; то есть в вашем случае UWP не является подмножеством .NET 4.6, поэтому, когда вы создаете переносимую библиотеку классов, нацеленную на оба, вы не просто имеете все API-интерфейсы от более мелкой рамки.

При работе с clientide System.ServiceModel код выглядит еще более запутанным: хотя обе целевые платформы включают базовую поддержку для прокси WCF, API-интерфейсы достаточно разные, что нет портативного эквивалента, который будет доступен при создании PCL. Это причина поведения, которое вы видите: вы можете создать прокси-сервер как в библиотеке классов .NET 4.6, так и в библиотеке классов UWP, но вы не можете создать ее в переносимой библиотеке классов, ориентированной на оба из них. Вам нужно будет создать две отдельные библиотеки.

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

Вы можете достичь этого следующим образом:

  • Создать интерфейс для прокси-класса в общей портативной библиотеки классов для UWP и .NET 4.6.
  • Ссылка на эту общую библиотеку из обеих библиотек классов конкретной платформы: UWP и .NET 4.6. Прокси в этих 2 библиотеках должны реализовывать общий портативный интерфейс. Я не пробовал, но если вы настроите ссылки на службы для повторного использования типов из вашей переносимой библиотеки классов, созданные прокси должны уже реализовывать ваши интерфейсы. Таким образом, вы могли бы избежать создания оболочек вокруг своих прокси в каждой из библиотек классов конкретной платформы.
  • Теперь вы можете написать бизнес-логику в общей переносимой библиотеке классов и работать с прокси-серверами только с использованием общего интерфейса. Чтобы получить конкретные примеры этого интерфейса на каждой платформе, используйте переносимую инфраструктуру инъекции зависимостей, такую ​​как Ninject.
  • В коде приложения для каждой платформы вы затем инициализируете инфраструктуру внедрения зависимостей, зарегистрировав правильную реализацию прокси интерфейса, либо UWP, либо .NET 4.6. Конечно, вы также будете ссылаться на общую переносимую библиотеку классов из обоих приложений, а также на подходящую библиотеку классов конкретной платформы в каждом приложении.