Xamarin.Forms PCL
で依存サービスを使用すると、このエラーが発生します。 iOS
とLinker
を含むこのエラーへの回答を見てきました。ただし、これはAndroid
で実行しており、Linker
はオフになっています。デバッグモードも同様です。
PCLでインターフェイスのデフォルトコンストラクターを見つけることができないと言われているコンストラクター
私が行ったいくつかの名前変更に問題があるのではないかと思ったので(リファクタリングツールを使用して、必要なすべての変更が行われていることを確認しました)、これらのフォルダー/ファイルを削除して、作り直しました。まだ何もない:(
私は何時間もこれを検索してデバッグしてきました。このエラーの原因となる可能性があるものは何ですか?私のDependencyService
の実装は正しいと確信しているので、何か違うように感じます。
これが私の関連コードです。
namespace Enchantum.Functions
{
public interface PaymentProcessor
{
void setUpCard(String cardNumber,
int expirationMonth,
int expirationYear,
String CVC);
Task cardTokenizer();
void backendCardCharge();
}
[Assembly: Xamarin.Forms.Dependency(typeof(PaymentProcessor_Android))]
namespace Enchantum.Droid.Functions_Android
{
class PaymentProcessor_Android : PaymentProcessor
{
public PaymentProcessor_Android() { }
private Card mCard;
private Token mToken;
public void setUpCard(String cardNumber, int expirationMonth,
int expirationYear, String cvcCode)
{
Card card = new Card
{
Number = cardNumber,
ExpiryMonth = expirationMonth,
ExpiryYear = expirationYear,
CVC = cvcCode
};
mCard = card;
}
public async Task cardTokenizer()
{
mToken = await StripeClient.CreateToken(mCard);
}
/*TODO:
* */
public void backendCardCharge()
{
throw new NotImplementedException();
}
[Assembly: Xamarin.Forms.Dependency(typeof(PaymentProcessor_iOS))]
namespace Enchantum.iOS.Functions_iOS
{
class PaymentProcessor_iOS : PaymentProcessor
{
public PaymentProcessor_iOS() { }
private Card mCard;
private Token mToken;
public void setUpCard(String cardNumber, int expirationMonth,
int expirationYear, String cvcCode)
{
Card card = new Card
{
Number = cardNumber,
ExpiryMonth = expirationMonth,
ExpiryYear = expirationYear,
CVC = cvcCode
};
mCard = card;
}
public async Task cardTokenizer()
{
mToken = await StripeClient.CreateToken(mCard);
}
/*TODO:*/
public void backendCardCharge()
{
throw new NotImplementedException();
}
}
DependencyService.Get<PaymentProcessor>().setUpCard(
cardNumber,
expirationMonth,
expirationYear,
CVC);
My error、again: "System.MissingMethodException:Defaultコンストラクタnot found for type Enchantum.Functions.PaymentProcessor"
何が問題になっていますか?
P.S。インターフェースの不適切な命名規則やその他の混乱を許してください。
おそらく、インターフェース実装クラスをpublic
にしてみてください。コンストラクタは表示されますが、クラス自体は表示されない場合があります。
以下のようなので:
[Assembly: Xamarin.Forms.Dependency(typeof(PaymentProcessor_Android))]
namespace Enchantum.Droid.Functions_Android
{
public class PaymentProcessor_Android : PaymentProcessor //make the class public
{
//your code here
}
}
私の場合、問題はアセンブリの輸出ラインにありました。
クラスの実装の代わりにインターフェイスタイプを使用したため、アプリがクラッシュしました:[Assembly: Xamarin.Forms.Dependency(typeof(IServiceType))]
しかし正しい方法は、インターフェイスのプラットフォーム固有実装を使用することです。[Assembly: Xamarin.Forms.Dependency(typeof(ServiceImplementation_Android))]
リンカーにも同じ問題がありますが、リンカーをなしに設定すると機能します
readonlyプライベートプロパティを初期化するデフォルトコンストラクターを定義したときにも、同じエラーが発生しました。
狂ったように見えたが、Javaに与えられた意味は読み取り専用という概念がなく、プロパティはおそらく定数に変換されている。).