Xamarin.formsからカスタムビューをレンダリングしようとしています。次のコードでレンダリングしようとすると
[アセンブリ:ExportRenderer(typeof(SwipeableCard)、typeof(CardContainer))]。
しかし、エラーは次のようにスローされます
タイプ 'Com.andtinde.CardContainer'のデフォルトコンストラクタが見つかりません。
カードコンテナにデフォルトのコンストラクタがないためだと思います。また、Adapterviewから継承しているため、提供できません。
私が間違っていること。どんな助けでも適用されるでしょう。
これはXamarinの既知のバグだと思います。しかし、依存関係サービスでも同じ問題が発生しました。 iOSビルドオプションのリンカー動作で「LinkFrameworkSDKOnly」を設定することで解決しました。
あなたはすでにあなたが間違っていることを特定しました。 ExportRenderer needs実行していることを実行できるデフォルトのコンストラクター。 AdapterViewから継承すると、デフォルトのコンストラクターを使用できないのはなぜですか?
次のようなことができるはずです。
public class CardContainer
{
public CardContainer() // This is a default constructor
: base(...) // If base class requires arguments, pass them here
{
}
}
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のバグではないため、リンクされたアセンブリを管理する方法を知っておく必要があります.xamarinで動作するすべてのランタイムは、次のようなエラーを受け取ります。たとえば、アセンブリがない場合、ランタイムでクラスのパフォーマンスを取得したり、ランタイムでインスタンスを作成したりすることはできません。リンクされています。リンクされたアセンブリを手動で管理するか、アプリケーションオプションでそれらを Alessio Campanelli 回答 ここ として設定できます。手動で設定しないと、アプリケーションはリリースパッケージで大きなサイズになりますapkファイルのように。手動で設定するには?
<?xml version="1.0" encoding="utf-8" ?>
<linker>
<Assembly fullname="Newtonsoft.Json">
<type fullname="*" />
</Assembly>
</linker>