我创建了一个Xamarin.Forms项目/库。项目/库包含页面,视图,渲染器和其他可共享组件。
然后,我创建了将引用共享项目的主项目。我将每个项目(共享,android,ios)添加为现有解决方案项目。
问题是当我尝试在MainShareProject中使用ShareProject的自定义渲染器时,未调用SharedProjectAndroid和SharedProjectiOS中的实现。当我通过DependencyService在MainShareProject中调用ISomeService时,它为null
解决方案结构:
共享项目结构(SharedProject的目的是在其他项目中重用它)
ShareProject(NET标准库)
自定义渲染器
ISomeService
SharedProjectAndroid(参考ShareProject; Xamarin.Android库)
自定义渲染器实现
ISomeServiceImpl
ShareProjectiOS(参考ShareProject; Xamarin.iOS库)
自定义渲染器实现
ISomeServiceImpl
主要项目结构
MainShareProject(参考ShareProject)
使用自定义渲染器(在ShareProject中调用自定义渲染器构造函数,但不调用其实现
通过DependencyService使用ISomeService(返回null)
MainProjectAndroid(参考ShareProject和ShareProjectAndroid)
MainProjectiOS(参考ShareProject和ShareProjectAndroid)
var someService = DependencyService.Get<SharedProject.ISomeService>(); //returs null
Android
[assembly: Dependency(typeof(SharedProjectiAndroid.SomeService))]
{
public class UserPreference : ISomeService
}
答案 0 :(得分:2)
我正面临着一个同样的问题,即不调用来自外部程序集的自定义渲染器。我从未进行过更深入的研究,但似乎它与代码优化有关。
对我来说,解决方案是将项目中的显式调用添加到外部程序集。
像这样:
程序集
public static class CoreUI
{
public static void Init() { }
}
项目
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
CoreUI.Init(); // Initialisation of CoreUI
}