InvalidCastException bei Instanziierung einer Klasse eines Assemblies



  • Hallo ich habe folgendes Problem. Kann mir jemand helfen?

    In einem Assembly "MyAssembly.dll" sind folgende Klassen definiert:

    public interface ITestKlasse {
    int CallingCount { get; }
    }

    public class TestKlasse : ITestKlasse {
    public int m_CallingCount;

    public TestKlasse() {
    m_CallingCount = 5;
    }

    public int CallingCount {
    get {
    return m_CallingCount;
    }
    }
    }

    Führe ich nun in einer anderen Assembly folgenden Code aus, kommt es zu einer InvalidCastException, warum?

    Assembly aAss = Assembly.LoadFrom(@"MyAssembly.dll");
    object aObject = aAss.CreateInstance(typeof(TestKlasse).FullName);
    ITestKlasse aTJ = (ITestKlasse)aObject; --> hier ommt es zu der Exception



  • Ich gehe mal davan aus, dass du im Quellcode nicht auf die Dll refenzierst. Damit ist natürlich ein Casten auf dein Interface nicht Möglich ( Compiler-Error ).
    Es gibt ein paar Möglichkeiten. Z.B.
    du verlegst das Interface in eine ander Dll, die du direkt refenzierst ( eigene Dll )
    oder du rufst über Type.InvokeMember(... ) deine Mehode(n) auf.



  • CreateInstance führt allerdings dazu, daß der Kontruktor von Testklasse durchlaufen wird, was ja bedeutet, daß ich die dll referenziere, oder?



  • Nicht ganz, was du machst ist eine dynamische Refenzierung, h.H. du gibst erst zur Laufzeit deine DLL bekannt. Möchtest aber beim Compilieren schon darauf zugreifen, was natürlich nicht geht.



  • Der Code lässt sich wunderbar compilieren und aus ausführen, bis eben zu jener Zeile.

    wenn ich mir aObject im Debugger anschaue, besitzt es auch eine "saubere" Referenz auf TestKlasse, nur jeglicher Cast nach ITestKlasse, oder sogar nach TestKlasse führt zu jener Exception.



  • Also, ich habe mir mal ein Testproject erstellt und dein Zeug von oben eingestzt und es lief alles. Eventuel mach doch mal ein Komplett neues Build (Rebuild).


Anmelden zum Antworten