Xamarin DependencyService:System.MissingMethodException:找不到 [Interface] 的默认构造函数
Xamarin DependencyService: System.MissingMethodException: Default constructor not found for [Interface]
我在 Xamarin.Forms PCL
上使用依赖服务时收到此错误。我已经看到涉及 iOS
和 Linker
的此错误的答案。
但是,我在 Android
上 运行 而 Linker
关闭。调试模式也是如此。
构造函数告诉我它无法在 PCL.
中找到接口的默认构造函数
我认为这可能是我所做的一些重命名的问题(我使用了重构工具并确保进行了所有必要的更改)所以我删除了那些 folders/files 并重新制作了它们。仍然没有:(
我已经搜索和调试了几个小时。
可能导致此错误的原因有哪些?
我很确定我的 DependencyService
实现是正确的,所以我觉得它有些不同。
这是我的相关代码。
接口:
namespace Enchantum.Functions
{
public interface PaymentProcessor
{
void setUpCard(String cardNumber,
int expirationMonth,
int expirationYear,
String CVC);
Task cardTokenizer();
void backendCardCharge();
}
Android:
[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();
}
iOS:
[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();
}
}
在 Xamarin.Form 内容页面中实施:
DependencyService.Get<PaymentProcessor>().setUpCard(
cardNumber,
expirationMonth,
expirationYear,
CVC);
又是我的错误:"System.MissingMethodException: Default constructor not found for type Enchantum.Functions.PaymentProcessor"
出了什么问题?
P.S. 请原谅我对界面的不正确命名约定以及其他一些混乱。
也许您可以尝试使接口实现 classes public
,您的构造函数是可见的,但 class 本身可能不可见。
很喜欢:
[assembly: Xamarin.Forms.Dependency(typeof(PaymentProcessor_Android))]
namespace Enchantum.Droid.Functions_Android
{
public class PaymentProcessor_Android : PaymentProcessor //make the class public
{
//your code here
}
}
当我定义一个初始化 readonly private 属性 的默认构造函数时,我遇到了同样的错误。
看起来很疯狂,但考虑到 Java 没有只读的概念,并且 属性 可能被转换为常量,这是有道理的。
我对 Linker 有同样的问题,当我将 Linker 设置为 None 它工作
就我而言,问题出在程序集导出线上。
当我使用接口类型而不是 class 实现时,应用程序崩溃了:
[assembly: Xamarin.Forms.Dependency(typeof(IServiceType))]
但是正确的方法是使用平台特定接口的实现:
[assembly: Xamarin.Forms.Dependency(typeof(ServiceImplementation_Android))]
我在 Xamarin.Forms PCL
上使用依赖服务时收到此错误。我已经看到涉及 iOS
和 Linker
的此错误的答案。
但是,我在 Android
上 运行 而 Linker
关闭。调试模式也是如此。
构造函数告诉我它无法在 PCL.
中找到接口的默认构造函数我认为这可能是我所做的一些重命名的问题(我使用了重构工具并确保进行了所有必要的更改)所以我删除了那些 folders/files 并重新制作了它们。仍然没有:(
我已经搜索和调试了几个小时。
可能导致此错误的原因有哪些?
我很确定我的 DependencyService
实现是正确的,所以我觉得它有些不同。
这是我的相关代码。
接口:
namespace Enchantum.Functions
{
public interface PaymentProcessor
{
void setUpCard(String cardNumber,
int expirationMonth,
int expirationYear,
String CVC);
Task cardTokenizer();
void backendCardCharge();
}
Android:
[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();
}
iOS:
[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();
}
}
在 Xamarin.Form 内容页面中实施:
DependencyService.Get<PaymentProcessor>().setUpCard(
cardNumber,
expirationMonth,
expirationYear,
CVC);
又是我的错误:"System.MissingMethodException: Default constructor not found for type Enchantum.Functions.PaymentProcessor"
出了什么问题?
P.S. 请原谅我对界面的不正确命名约定以及其他一些混乱。
也许您可以尝试使接口实现 classes public
,您的构造函数是可见的,但 class 本身可能不可见。
很喜欢:
[assembly: Xamarin.Forms.Dependency(typeof(PaymentProcessor_Android))]
namespace Enchantum.Droid.Functions_Android
{
public class PaymentProcessor_Android : PaymentProcessor //make the class public
{
//your code here
}
}
当我定义一个初始化 readonly private 属性 的默认构造函数时,我遇到了同样的错误。
看起来很疯狂,但考虑到 Java 没有只读的概念,并且 属性 可能被转换为常量,这是有道理的。
我对 Linker 有同样的问题,当我将 Linker 设置为 None 它工作
就我而言,问题出在程序集导出线上。
当我使用接口类型而不是 class 实现时,应用程序崩溃了:
[assembly: Xamarin.Forms.Dependency(typeof(IServiceType))]
但是正确的方法是使用平台特定接口的实现:
[assembly: Xamarin.Forms.Dependency(typeof(ServiceImplementation_Android))]