#c# #xamarin #xamarin.forms #multitargeting
Вопрос:
Доброе утро
Я создаю пакет для Xamrin.Формы. Я слежу за тем, как это сделано Джеймсом Монтенанго
Вот некоторые важные фрагменты моего .csproj
<TargetFrameworks>netstandard2.0;MonoAndroid10.0;Xamarin.iOS10</TargetFrameworks>
<ItemGroup>
<Compile Include="***.shared.cs" />
</ItemGroup>
<ItemGroup Condition=" $(TargetFramework.StartsWith('netstandard')) ">
<PackageReference Include="XTricks.Shared" Version="1.0.1" />
<PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
</ItemGroup>
<ItemGroup Condition=" $(TargetFramework.StartsWith('MonoAndroid')) ">
<PackageReference Include="Xamarin.Forms" Version="5.0.0.2196" />
<PackageReference Include="Xamarin.GooglePlayServices.Location" Version="118.0.0.1" />
<PackageReference Include="XTricks.Shared" Version="1.0.1" />
<PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
<Compile Include="***.android.cs" />
</ItemGroup>
<ItemGroup Condition=" $(TargetFramework.StartsWith('Xamarin.iOS')) ">
<PackageReference Include="Xamarin.Essentials" Version="1.6.1" />
<PackageReference Include="XTricks.Shared" Version="1.0.1" />
<Compile Include="***.apple.cs" />
</ItemGroup>
Все работает, кроме одной важной вещи.
Я хотел бы иметь две реализации одного и того же класса для Android и для iOS.
Для этой цели я объявляю и интерфейс как:
IMyService.shared.cs
И я создаю два класса, один в папке Android под названием:
MyService.android.cs, который реализует IMyService.shared.cs
и второй в папке Apple, называется MyService.apple.cs.
Теперь, как это сделано в вышеупомянутой библиотеке, я хотел бы использовать сервис в общем коде.
private static IMyService Service
{
get
{
#if NETSTANDARD1_0 || NETSTANDARD2_0
return null;
#else
return new MyService(); // And this code is red one. MyService cannot be found.
#endif
}
}
По сути, я застрял там. Кто-нибудь знает, как двигаться дальше?
Комментарии:
1. Помогает ли эта статья ? Внедрение зависимостей — это самый простой способ разрешить класс обслуживания, зависящий от платформы.
2. @AndrewH спасибо, однако это не решение этой проблемы
3. Это именно то решение, которое вы представили проблему: «Я хотел бы иметь две реализации одного и того же класса для Android и для iOS». Если у вас другая проблема, пожалуйста, обновите вопрос.
Ответ №1:
Убедитесь, что у вас одинаковое пространство имен для MyService
класса с вашими общими кодами, а затем вы просто создаете свою библиотеку.