也许这是一个非常基本的问题,但在这里是:
我有2个图书馆:
创建包装本机库的Xamarin.Forms库的最简单方法是什么,并在需要时调用它们?
假设两个库都做同样的事情:您可以使用策略模式将这些库公开给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
我假设你的意思是实际的平台库而不是应用程序。如果你的意思是应用程序:你正在考虑向后的项目。 X.Forms库不引用或调用平台库(X.Android和X.iOS);平台库调用Xamarin.Form库。只需确保两个平台实现在Xamarin.Forms项目中针对该接口实现相同的接口和代码。
如果您正在创建类似于Xamarin.Forms中使用的插件或控件之类的东西,那么您需要跳过几个环节。我建议遵循James Montemagno的模式。 (他是Xamarin的PM,制造了大量的东西)
如果你想自己手动滚动一个可重用的控件/ nuget,你将需要一个抽象来编写你的Xamarin.Forms库和某种形式的依赖注入以获得本机实现。
这是关于PCL诱饵和开关的一个很好的blog post(这是与nugets发生的事情)
tl; dr你需要依赖注入。如果尚未使用它,请使用Xamarin.Forms附带的DependencyService
。