ReflectionTyPeloadexception: тип пытается реализовать недоступный интерфейс

StackOverflow https://stackoverflow.com/questions/4350363

Вопрос

я использую Сборка. 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();
        }
        }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top