Hi @ All.
Ich muss z.Zt. eine Klasse schreiben, die mir aus einem Interface und einem Objekt, welches dieses Interface nicht implementiert, aber die gleichen Methoden hat, einen Proxy bastelt (DuckTyping).
Soweit kein Problem. Allerdings funktioniert das Hinzufügen des Interfaces nicht so wirklich:
var asmBuilder = Thread.GetDomain().DefineDynamicAssembly(new AssemblyName {
Name = "SoWieSo"
}, AssemblyBuilderAccess.Run);
var modBuilder = asmBuilder.DefineDynamicModule("SoWieSo");
var typeBuilder = modBuilder.DefineType("SoWieSo", TypeAttributes.Public | TypeAttributes.Class);
typeBuilder.AddInterfaceImplementation(typeof(IMyInterface));
//Ganz viel IL-Kram
var myType = typeBuilder.CreateType();
In der letzten Zeile bekomme ich eine TypeLoadException
:
System.TypeLoadException: Der Typ "SoWieSo" in der Assembly "SoWieSo, ..." versucht, eine Schnittstelle zu implementieren, auf die nicht zugegriffen werden kann.
Ich muss bestimmt die Assembly der Schnittstelle noch referenzieren, aber ich finde einfach nicht heraus, wo.
Gruß, Christian.
Habe inzwischen herausgefunden, dass man das Interface auch beim erstellen des Types mit angeben muss, aber das ändert nichts an der Exception.
var typeBuilder = modBuilder.DefineType("SoWieSo", TypeAttributes.Public | TypeAttributes.Class, typeof(object), new Type[] { typeof(IMyInterface) });
So. Problem gelöst...
Mein Interface war ohne Zugriffsmodifizierer implementiert. Habs jetzt Public, und die Exception ist weg...
Danke trotzdem fürs lesen 👍