错误信息为:[assembly: ExportRenderer(typeof(SwipeableCard),typeof(CardContainer))] .
我猜这是因为Card Container没有默认构造函数。而我无法提供一个默认构造函数,因为它继承自Adapterview。类型“Com.andtinde.CardContainer”的默认构造函数未找到。
我做错了什么?感谢任何帮助。
错误信息为:[assembly: ExportRenderer(typeof(SwipeableCard),typeof(CardContainer))] .
我猜这是因为Card Container没有默认构造函数。而我无法提供一个默认构造函数,因为它继承自Adapterview。类型“Com.andtinde.CardContainer”的默认构造函数未找到。
我认为这是Xamarin已知的一个错误。虽然我在使用Dependency Service时遇到了同样的问题,但我通过在iOS Build Options Linker behavior中设置“Link Framework SDKs Only”来解决了这个问题。
您已经确定了自己的错误。ExportRenderer需要一个默认构造函数才能完成它正在做的事情。为什么从AdapterView继承会阻止您拥有默认构造函数?
您应该可以尝试以下操作:
public class CardContainer
{
public CardContainer() // This is a default constructor
: base(...) // If base class requires arguments, pass them here
{
}
}
这不是Xamarin的一个bug,你需要了解如何管理你的链接程序集。在Xamarin中所有的运行时操作都会出现诸如此类的错误,例如当该程序集没有被链接时,在运行时无法获取类的属性或创建实例。
你可以手动管理链接程序集,或者像Alessio Campanelli在这里所回答的那样,在应用程序选项中设置它们。如果你没有手动设置它们,你的应用程序在发布包(例如apk文件)中的大小将会变得很大。
如何手动设置呢?
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<assembly fullname="Newtonsoft.Json">
<type fullname="*" />
</assembly>
</linker>
通常在您使用类进行依赖注入或使用特定于设备的类时会出现此问题。您可以通过调试来尝试解决它。我曾经遇到过同样的问题,但是通过将当前类提供给 typeof
属性来解决它。不应该给出服务或任何其他接口名称:
[assembly: Xamarin.Forms.Dependency(typeof(Name Of Class))]
而不是:
[assembly: Xamarin.Forms.Dependency(typeof(Name Of Interface))]
你最好从ViewRenderer继承,并将CardContainer作为本地视图类型提供。然后重写ViewRenderer的OnElementChanged方法并为渲染器构造一个新的CardContainer。下面是一个简短的版本,可以帮助你入门。
注册:
[assembly: ExportRenderer(typeof(SwipeableCard), typeof(SwipeableCardRenderer ))]
类定义:
SwipeableCardRenderer : ViewRenderer<SwipeableCard, CardContainer>
OnElementChanged重写:
if (this.Control == null)
{
this.SetNativeControl(new CardContainer(this.Context));
}
//added this code to fix default constructor issue for appshell pages
if(isLogged == "55")
{
MainPage = new HomePage();
}