ReflectionTypeLoadException: Tipo está tratando de implementar una interfaz inaccesibles

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

Pregunta

Estoy usando Assembly.GetTypes () para obtener todos los tipos definidos por el plug-in en una biblioteca (para que pueda crear una instancia de casos plugin).

En una biblioteca particular, el aumento método de una ReflectionTypeLoadException, diciendo:

Type <Type> is attempting to implement an inaccessible interface

buscar en Google que parece porque la específica Tipo implementa una interfaz que no sea pública. Y de hecho lo es, pero el Tipo está anidada en otra clase pública, declarada como privado.

¿Cómo evitar esta excepción?

....

públicas interfaz Hecho el código funciona. ¿Es posible definir este comportamiento extraño es un insecto (en Assembly.GetTypes ())? Esto implica que un tipo de biblioteca no puede implementar un interaface protegida!

¿Fue útil?

Solución

El problema se resolvió mediante la eliminación de la protección anidado tipo del tipo de público.

Otros consejos

Me enfrentó misma edición, mientras que MessagePack serialización. Yo estaba tratando de implementar la interfaz en la clase interna por lo que Thew esta excepción "de montaje 'MessagePack.Resolvers.DynamicObjectResolver, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null' está tratando de implementar una interfaz inaccesible." Así que tomé esa clase interna de su clase en el mismo espacio de nombres de contenedores a continuación es mi antes y después de código ... Antes ....

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));
        }
        }
}

Después de ....

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();
        }
        }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top