我正在尝试从xamarin.forms渲染自定义视图
[程序集:ExportRenderer(类型为(SwipeableCard),类型为(CardContainer)]。
但是一个错误像一样抛出
找不到类型为"Com.andinde.CardContainer"的默认构造函数。
我想这是因为卡容器没有默认的构造函数。我不能提供一个,因为它继承了Adapterview。
我做错了什么。任何帮助都会得到通知。
我认为这是Xamarin中的一个已知错误。不过,我在依赖服务方面也遇到了同样的问题。我通过在iOS构建选项的链接器行为中设置"仅链接框架SDK"来解决这个问题。
您已经发现自己做错了什么。ExportRenderer需要一个默认构造函数才能执行它正在执行的操作。为什么从AdapterView继承会阻止您拥有默认构造函数?
你应该能够做一些类似的事情:
public class CardContainer
{
public CardContainer() // This is a default constructor
: base(...) // If base class requires arguments, pass them here
{
}
}
这不是Xamarin上的错误,你必须知道如何管理链接的程序集。Xamarin中的所有运行时工作都会出现这样的错误,例如,当程序集没有链接时,你无法在运行时获得类的peroperty或在运行时创建实例。你可以手动管理链接的程序集,或者在应用程序选项中设置这些程序集,如Alessio Campanelli在这里回答的那样,如果你不手动设置,你的应用程序将在像apk文件这样的发布包中获得大尺寸。如何手动设置?
- 在你的android应用程序中创建一个xml文件,名称为"linked.xml"
- 右键单击并转到"linked.xml"的属性,并将"Build Action"设置为"LinkDescription"
- 添加运行时使用的程序集,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<assembly fullname="Newtonsoft.Json">
<type fullname="*" />
</assembly>
</linker>
xamarin 中的链接器
Xamarin Forms PCL:System.MissingMethodException:默认构造函数找不到类型
每当您使用类进行依赖项注入或使用特定于设备的类时,通常都会发生这种情况。您可以通过调试进行尝试。我也遇到过同样的问题,但通过给出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));
}
在Xamarin中更新所有nuget包后,我也面临这个问题。
最后我使用一些间接修复
我用伪调用了一个类
ex(isLogged==从未达到"55")
//added this code to fix default constructor issue for appshell pages
if(isLogged == "55")
{
MainPage = new HomePage();
}