Сервис зависимостей Xamarin для iOS и .Net Standard 2.0 - PullRequest
0 голосов
/ 12 июня 2018

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

  • SLMobileLibrary
  • SLMobileLibrary.Android
  • SLMobileLibrary.iOS

Эти три проекта написаны для создания пакета NuGet, импортированного в другой проект:

  • SLMobileLibraryTest
  • SLMobileLibraryTest.iOS
  • SLMobileLibraryTest.Android

Как видно на этом экране:

enter image description here

Теперь у SLMobileLibrary есть служба зависимостей:

using System;
namespace SLMobileLibrary
{
    public interface ISampleLibrary
    {
        string HelloWorld();
    }
}

SLMobileLibrary.Android имеет реализацию для Android:

using System;
using SLMobileLibrary.Android;
using Xamarin.Forms;

[assembly: Dependency(typeof(SampleLibrary))]

    namespace SLMobileLibrary.Android
    {
        public class SampleLibrary : ISampleLibrary
        {
            public SampleLibrary()
            {
            }

            public string HelloWorld()
            {
                return "Hello World! Android";
            }
        }
    }

SLMobileLibrary.iOS имеет реализацию для iOS:

using System;
using SLMobileLibrary.iOS;
using Xamarin.Forms;

[assembly: Dependency(typeof(SampleLibrary))]
namespace SLMobileLibrary.iOS
{
    public class SampleLibrary : ISampleLibrary
    {
        public SampleLibrary()
        {
        }

        public string HelloWorld()
        {
            return "Hello World! iOS";
        }
    }
}

Итак, в моем App.cs я вспоминаю метод следующим образом:

string t = DependencyService.Get<ISampleLibrary>().HelloWorld();

На Android I 'Нет проблем, на iOS происходит сбой программы с исключением нулевого объекта, я думаю, потому что она не может найти реализацию на iOS.Но если я попытаюсь поместить SimpleLibrary.cs в SLMobileLibraryTest.iOS, все будет прекрасно.Я действительно не могу понять, почему iOS не может найти реализацию, если реализация находится в SLMobileLibrary.iOS как SLMobileLibrary.Android.

Кто-нибудь может мне помочь?Я просто прикрепил исходный код, чтобы вы могли скачать его и попробовать скомпилировать на iOS.(https://drive.google.com/open?id=12P1zu7BUiwvAkelKAI7fsCxBJYqvmpwZ).

Спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

Я не могу помочь вам узнать причину этого NRE, но если вы хотите, чтобы он работал, достаточно, чтобы на iOS вы удалили регистрацию с помощью [assembly: Dependency(typeof(SampleLibrary))] и добавили Xamarin.Forms.DependencyService.Register<SLMobileLibrary.iOS.SampleLibrary>(); только в начале вашего AppDelegate.Сказав это, в вас я бы попытался использовать контейнер IoC, такой как Autofac или MvvmLight, и инжектор конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...