Frage

Ich bin mit Assembly.GetTypes () für alle Arten von in einer Plugin-Bibliothek definiert bekommen (so ich Plugin-Instanzen instanziieren).

Auf einer bestimmten Bibliothek, die Methode raise a Reflection und sagte:

Type <Type> is attempting to implement an inaccessible interface

es Googeln scheint, da die spezifische Typ Geräte eine nicht-öffentliche Schnittstelle. Und tatsächlich ist es, aber die Typ in einem anderen öffentlichen Klasse verschachtelt, als private deklariert.

Wie diese Ausnahme vermeiden?

....

Made Schnittstelle public Der Code funktioniert. Ist es möglich, dieses seltsame Verhalten zu definieren, wird ein Fehler (in Assembly.GetTypes ())? Dies bedeutet, dass eine Bibliothek Typ nicht eine geschützte interaface implementieren können!

War es hilfreich?

Lösung

Das Problem wurde durch Entfernen den geschützten gelöst verschachtelten Typen aus dem öffentlichen Typ.

Andere Tipps

stand ich vor demselben Problem während Message Serialisierung. Ich habe versucht, Schnittstelle in interne Klasse zu implementieren, so dass es diese Ausnahme thew „von Assembly‚MessagePack.Resolvers.DynamicObjectResolver, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null‘versucht, eine unzugängliche Schnittstelle zu implementieren.“ Also ich, dass interne Klasse seiner Container-Klasse unten in gleichem Namensraum ist meine vor und nach dem Code nahm ... Vor ....

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

Nach ....

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();
        }
        }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top