主项目未调用参考项目自定义渲染器

时间:2019-03-06 22:11:01

标签: xamarin xamarin.forms xamarin.android xamarin.ios

我创建了一个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

}

1 个答案:

答案 0 :(得分:2)

我正面临着一个同样的问题,即不调用来自外部程序集的自定义渲染器。我从未进行过更深入的研究,但似乎它与代码优化有关。

对我来说,解决方案是将项目中的显式调用添加到外部程序集。

像这样:

程序集

public static class CoreUI
{
   public static void Init() { }        
}

项目

protected override void OnCreate(Bundle bundle)
{ 
   base.OnCreate(bundle); 
   CoreUI.Init(); // Initialisation of CoreUI
}