未找到类型'MyClass'的默认构造函数

时间:2015-03-17 11:33:47

标签: c# xamarin xamarin.android xamarin.forms

我正在尝试从xamarin.forms渲染自定义视图。当我尝试使用以下代码进行渲染时

  

[assembly:ExportRenderer(typeof(SwipeableCard),typeof(CardContainer))]。

但错误就像

一样
  

找不到类型为'Com.andtinde.CardContainer'的默认构造函数。

我想这是因为卡容器没有默认构造函数。我无法提供一个,因为它继承自Adapterview。

我做错了什么。任何帮助都会得到满足。

6 个答案:

答案 0 :(得分:24)

我认为这是Xamarin中的已知错误。 我有一个与依赖服务相同的问题。 我通过在iOS Build Options的链接器行为中设置“Link Framework SDKs”解决了这个问题。

答案 1 :(得分:3)

您已经确定了自己做错了什么。 ExportRenderer 需要一个默认构造函数才能完成它正在做的事情。为什么继承自AdapterView会阻止您使用默认构造函数?

您应该可以执行以下操作:

public class CardContainer
{
    public CardContainer() // This is a default constructor
        : base(...) // If base class requires arguments, pass them here
    {
    }
}

答案 2 :(得分:2)

通过继承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));
}

答案 3 :(得分:2)

Xamarin表单PCL:System.MissingMethodException:默认构造函数 找不到类型

每当您使用一个类进行依赖项注入或使用特定于设备的类时,这种情况通常都会发生。您可以通过调试进行尝试。我曾经遇到过同样的情况,但是通过为typeof属性提供当前类来解决了它。不应提供服务或任何其他接口名称:

[assembly: Xamarin.Forms.Dependency(typeof(Name Of Class))]

而不是:

[assembly: Xamarin.Forms.Dependency(typeof(Name Of Interface))]

答案 4 :(得分:0)

这不是Xamarin的错误,你必须知道如何管理链接的程序集。所有在xamarin中的运行时工作都会得到这样的错误,例如你不能在运行时获得类的peroperty或者在运行时创建实例装配没有联系。 您可以手动管理链接的程序集,也可以在Alessio Campanelli回答here中将其设置在您的应用程序选项中,如果您没有设置它,那么您的应用程序将在apk文件等发布包中获得大尺寸。 如何设置它?

  1. 在您的Android应用程序名称中创建一个xml文件&#34; linked.xml&#34;
  2. 右键单击并转到&#34; linked.xml&#34;的peroperties。并设置&#34; Build Action&#34;到&#34; LinkDescription&#34;
  3. 添加在运行时使用的程序集,如下所示:
  4.     <?xml version="1.0" encoding="utf-8" ?>
        <linker>
          <assembly fullname="Newtonsoft.Json">
            <type fullname="*" />
          </assembly>
        </linker>
    

    Linker in xamarin

答案 5 :(得分:0)

在更新所有 nuget 软件包后的 Xamarin 中,我也面临这个问题。

最后我使用了一些间接修复

我用假人叫了一个班

ex (isLogged == "55" 永远不会到达)

    //added this code to fix default constructor issue for appshell pages
    if(isLogged == "55")
    {
        MainPage = new HomePage();
    }