ReflectionTypeloAdexception:タイプはアクセスできないインターフェイスを実装しようとしています
-
08-10-2019 - |
質問
私は使用しています assembly.getTypes() プラグインライブラリで定義されているすべてのタイプを取得するには(プラグインインスタンスをインスタンスすることができます)。
特定のライブラリでは、この方法はReflectionTypeloadexceptionを上げ、次のように述べています。
Type <Type> is attempting to implement an inaccessible interface
グーグルは具体的なものだからです タイプ 非公開のインターフェイスを実装します。そして実際にはそうですが、 タイプ 別の公開クラスにネストされており、プライベートと宣言されています。
この例外を避けるにはどうすればよいですか?
....
コードが機能するインターフェースを公開しました。この奇妙な動作を定義することは可能ですか?これは、ライブラリタイプが保護されたインターフェースを実装できないことを意味します!
解決
問題は、保護されたものを削除することによって解決されました ネスト パブリックタイプからタイプ。
他のヒント
メッセージパックのシリアル化中に同じ問題に直面しました。私は内部クラスにインターフェイスを実装しようとしていたので、この例外は「アセンブリ」から「MessagePack.Resolvers.DynamicObjectResolver、バージョン= 0.0.0.0、Culture = neutral、publicKeyToken = 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();
}
}
}
所属していません StackOverflow