从Xamarin.Android / Xamarin.IOS库创建一个Xamarin.Forms库

问题描述 投票:1回答:2

也许这是一个非常基本的问题,但在这里是:

我有2个图书馆:

  • 1个Xamarin.Android库
  • 1个Xamarin.iOS库

创建包装本机库的Xamarin.Forms库的最简单方法是什么,并在需要时调用它们?

xamarin xamarin.forms xamarin.android xamarin.ios
2个回答
1
投票

假设两个库都做同样的事情:您可以使用策略模式将这些库公开给X.Forms:

1.)在您的X.Forms项目中,创建一个公共接口,公开您要在库中调用的方法:

public interface ICommonService
{
  void DoSomething();
  void DoSomethingElse();
}

2.)在两个平台项目中,提供此接口的具体实现:

public class CommonService : ICommonService
{
  public void DoSomething(){...}
  public void DoSomethingElse(){...}
}

由于具体实现在您的平台项目中,因此他们可以访问您想要利用的Xamarin.Android和Xamarin.iOS库。

3.)使用依赖注入在X.Forms项目中创建服务实例。一种方法是在X.Forms项目中使用DependencyService:

DependencyService.Get<ICommonService>().DoSomething();

根据您运行的是iOS还是Android应用程序,这将调用提供的具体实现。

注意:如果您计划使用DependencyService,则需要首先注册具体实现。

以下文档非常精彩地介绍了如何使用Xamarin.Forms DependencyService来实现策略模式:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/introduction


2
投票

我假设你的意思是实际的平台库而不是应用程序。如果你的意思是应用程序:你正在考虑向后的项目。 X.Forms库不引用或调用平台库(X.Android和X.iOS);平台库调用Xamarin.Form库。只需确保两个平台实现在Xamarin.Forms项目中针对该接口实现相同的接口和代码。

如果您正在创建类似于Xamarin.Forms中使用的插件或控件之类的东西,那么您需要跳过几个环节。我建议遵循James Montemagno的模式。 (他是Xamarin的PM,制造了大量的东西)

  1. 使用旧的Visual Studio Extension将为您划出项目。不幸的是它使用PCL。
  2. 使用他用于Xamarin.Essentials的模式。它使用花哨的构建条件,只有一个项目。

如果你想自己手动滚动一个可重用的控件/ nuget,你将需要一个抽象来编写你的Xamarin.Forms库和某种形式的依赖注入以获得本机实现。

这是关于PCL诱饵和开关的一个很好的blog post(这是与nugets发生的事情)

tl; dr你需要依赖注入。如果尚未使用它,请使用Xamarin.Forms附带的DependencyService

© www.soinside.com 2019 - 2024. All rights reserved.