ReflectionTyPeloadexception: тип пытается реализовать недоступный интерфейс
-
08-10-2019 - |
Вопрос
я использую Сборка. Gettypes () Для получения всех типов, определенных в библиотеке плагинов (поэтому я могу создать экземпляры плагинов).
На конкретной библиотеке метод поднимает рефлексиюПеловадебноеexception, говоря:
Type <Type> is attempting to implement an inaccessible interface
Гугла, похоже, потому что конкретный Тип реализует непубличный интерфейс. И на самом деле это, но Тип вложен в другой государственный класс, заявленный как личный.
Как избежать этого исключения?
....
Сделанный интерфейс общественности Код работает. Можно ли определить это странное поведение - это ошибка (в сборке. Getttypes ())? Это подразумевает, что тип библиотеки не может реализовать защищенную межезацию!
Решение
Проблема была решена путем удаления защищенного вложенный Тип от общего типа.
Другие советы
Я столкнулся с той же проблемой во время сериализации GessPack. Я пытался реализовать интерфейс во внутреннем классе, так что это это исключение «из сборки» MessagePack.resolvers.DynamicobjectResolver, версия = 0,0.0.0, культура = нейтральный, publickeyteken = null ', пытается реализовать недоступный интерфейс. " Поэтому я взял этот внутренний класс из своего класса контейнеров в том же пространстве имен ниже, это мой до и после кода ... До ....
using MessagePack;
using System;
namespace ConsoleApp1
{
class CallbackReciever
{
[MessagePackObject]
public class SampleCallback : IMessagePackSerializationCallbackReceiver
{
[Key(0)]
public int Key { get; set; }
public void OnBeforeSerialize()
{
Console.WriteLine("OnBefore");
}
public void OnAfterDeserialize()
{
Console.WriteLine("OnAfter");
}
}
public static void Main()
{
SampleCallback b1 = new SampleCallback { Key = 1 };
Console.WriteLine("Starting serialization");
byte[] data = MessagePackSerializer.Serialize<dynamic>(b1);
foreach (byte b in data)
{
Console.WriteLine(b);
}
SampleCallback temp = MessagePackSerializer.Deserialize<SampleCallback>(data);
Console.WriteLine(MessagePackSerializer.ToJson(temp));
}
}
}
После....
using MessagePack;
using System;
namespace ConsoleApp1
{
[MessagePackObject]
public class SampleCallback : IMessagePackSerializationCallbackReceiver
{
[Key(0)]
public int Key { get; set; }
public void OnBeforeSerialize()
{
Console.WriteLine("OnBefore");
}
public void OnAfterDeserialize()
{
Console.WriteLine("OnAfter");
}
}
class CallbackReciever
{
public static void Main()
{
SampleCallback b1 = new SampleCallback { Key = 1 };
Console.WriteLine("Starting serialization");
byte[] data = MessagePackSerializer.Serialize<dynamic>(b1);
foreach (byte b in data)
{
Console.WriteLine(b);
}
SampleCallback temp = MessagePackSerializer.Deserialize<SampleCallback>(data);
Console.WriteLine(MessagePackSerializer.ToJson(temp));
Console.ReadKey();
}
}
}