DependencyService в проекте многоплатформенной библиотеки?

Я пытаюсь настроить DependencyService для вызова кода платформы в Мультиплатформенный проект.

введите описание изображения здесь

При вызове Dependency.Get<IService>() в общем проекте я получаю null.

Служба внутри iOS, похоже, не регистрируется.

Я пытался зарегистрировать это так: [assembly: Dependency(typeof(Service))]- поверх объявления пространства имен внутри проекта iOS. Что я должен был работать внутри проекта Xamarin.Forms. И я также попытался вызвать DependencyService.Register<Service>(); внутри метода Init в проекте iOS - вызвав его из проекта Xamarin.Forms iOS в AppDelegate - созданного для тестирования библиотеки.

Проект Shared и проект iOS, похоже, не совпадают DependencyService.

Как я могу вызвать код платформы в проекте iOS из общего проекта с помощью DependencyService?

Изменить

Я получаю System.PlatformNotSupportedException, когда работаю в Visual Studio в Windows - пытаюсь использовать DependencyService внутри проекта сетевой стандартной библиотеки. Может быть, Visual Studio для Mac просто не выдает ошибку и вместо этого возвращает null?


person lolelo    schedule 17.07.2019    source источник
comment
Почему вы все еще использовали проект совместного использования? Я предлагаю вам использовать XF. И вы можете поделиться образцом, содержащим проблему, чтобы я мог протестировать ее на своей стороне.   -  person Lucas Zhang    schedule 17.07.2019
comment
@ LucasZhang-MSFT Мне нужно создать NuGet Я не могу этого сделать с проектом XF?   -  person lolelo    schedule 17.07.2019
comment
Да - работаю над этим   -  person lolelo    schedule 17.07.2019
comment
github.com/Lelelo1/DependencyServiceIssue   -  person lolelo    schedule 17.07.2019
comment
Проблема также существует при попытке вызвать код конкретной платформы из проекта стандартной библиотеки .Net.   -  person lolelo    schedule 18.07.2019
comment
@lolelo, опишите, пожалуйста, что вы пытаетесь сделать?   -  person lawiluk    schedule 18.07.2019
comment
@lawiluk Я пытаюсь создать настраиваемый элемент управления, который можно создать в NuGet. Также требуется реализация для конкретной платформы.   -  person lolelo    schedule 18.07.2019


Ответы (1)


Вы можете легко решить проблему, удалив Общий проект и изменив

MyMutliplatformLibraryProject.Run.Test();

to

MyXamarinFormsProject.Run.Test();

Если вы пытаетесь создать Nuget с настраиваемыми элементами управления, вы можете следовать этот учебник, как это сделать.

Со стандартом .NET вам не нужно иметь общий проект. Единственное препятствие, которое я вижу, это то, что вы нацеливаетесь на несколько целей. Почему бы вам не начать с простого, а потом изменить его?

Короче говоря. Предположим, вам нужно приложение NuGet для Xamarin.Forms с iOS и Android. Вам просто нужен стандарт .NET, iOS и Android dll. Это все. Позже вы можете создать пакет с помощью nuspec

person lawiluk    schedule 18.07.2019
comment
MyXamarinFormsProject.Run.Test() был предназначен только для тестирования DependencyService. И это работает в проекте Xamarin.Forms. Однако он не работает ни в проекте Shared in Multiplatform, ни в проекте Net Standard. Используя только .dll для iOS / Android, я не получаю доступа к средствам визуализации в _2 _ / _ 3_ пространствах имен. - person lolelo; 18.07.2019
comment
Вам вообще не нужен общий проект. Просто попробуйте с нуля, и вы убедитесь в этом. Просто настройте свой файл NUSPEC правильно, и у вас будет доступ ко всему, что вам нужно. Поверьте мне в этом - person lawiluk; 18.07.2019
comment
Shared создается в результате создания многоплатформенного проекта: Multiplatform - ›platform-specific. - person lolelo; 18.07.2019
comment
Должны ли Xamarin.Forms.Platform.iOS/Xamarin.Forms.Platform.Android пространства имен быть доступными после добавления соответствующего файла dll? - person lolelo; 18.07.2019
comment
Не уверен, что вы имеете в виду, поэтому позвольте мне ответить по-другому: ваш nuget должен быть установлен во всех проектах: Core, iOS, Android. По сути, вы должны иметь доступ к своему элементу управления, а в проектах платформы у вас должен быть доступ к средствам визуализации. - person lawiluk; 18.07.2019
comment
Добавление dll для iOS и Android в стандартную библиотеку Net не дает мне доступа к средствам визуализации. Создание библиотек iOS / Android - к ​​ним нельзя получить доступ из стандартной библиотеки .Net (ни с DependencyService, ни с CustomRenderers). - person lolelo; 19.07.2019