Я получаю эту ошибку при использовании службы зависимостей на 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();
}
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: конструктор по умолчанию не найден для типа Enchantum.Functions.PaymentProcessor»
Что не так?
P.S. Прошу прощения за неправильное соглашение об именах для интерфейса, а также за какой-то другой беспорядок.