xamarin - 主项目未调用参考项目自定义渲染器
问题描述
我创建了一个 Xamarin.Forms 项目/库。项目/库包含页面、视图、渲染器和其他可共享组件。
然后我创建了将引用共享项目的主项目。我将每个项目(共享、android、ios)添加为现有解决方案项目。
问题是当我尝试在 MainShareProject 中使用 ShareProject 的自定义渲染器时,不会调用 SharedProjectAndroid 和 SharedProjectiOS 中的实现。当我通过 DependencyService 在 MainShareProject 中调用 ISomeService 时,它为空
解决方案结构:
共享项目结构(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
安卓
[assembly: Dependency(typeof(SharedProjectiAndroid.SomeService))]
{
public class UserPreference : ISomeService
}
解决方案
我遇到了同样的问题,即没有调用来自外部程序集的自定义渲染器。我从未深入调查过,但似乎它与代码优化有关。
对我来说,解决方案是将我的项目中的显式调用添加到外部程序集。
像这样:
集会
public static class CoreUI
{
public static void Init() { }
}
项目
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
CoreUI.Init(); // Initialisation of CoreUI
}
推荐阅读
- c - 什么是现代的、可移植的、安全的等价于 C 中编译时检查的 memcpy?
- azure - 刷新访问令牌时调用自定义 REST API
- google-bigquery - BigQuery 过滤在 subreddit 的所有可能帖子中包含一个单词的 selftext
- javascript - 多个值的多选下拉列表
- php - 我想在不同的页面上显示随机图像,而不需要从 php 中的数据库中重复
- appium - 我们应该使用哪个驱动程序在 appium 中创建页面对象模型
- python - 目标检测分类报告
- php - 仅当从mysql数据库中选择了一行时如何执行一段python代码
- azure - Azre Data Explorer 数据连接自动化
- android - 无法在 dsl Kotlin 的构建 gradle 应用程序级别中使用 android