できれば、それ以上のリフレクションを行わずに、クラスの他の場所で使用できるオブジェクトのインスタンスを作成したいと考えています。
オブジェクトを作成した後 (activator または constructorInfo のいずれかを使用して、両方の引数を読みましたが、たとえば、より短いものとして activator を使用しました) キャストする必要がありますが、これは機能しません。
例えば:
Server instance;
public void A()
{
Assembly loaded = Assembly.LoadFrom("C:\Program Files\test2\Shared.dll");
serverType = loaded.GetType("Server");
object obj = Activator.CreateInstance(serverType, new [] { "test" });
instance = (Server)obj;
}
public void B()
{
instance.startServer();
}
これは例外を与えます:
System.InvalidCastException: [A]Server cannot be cast to [B]Server.
Type A originates from 'Shared, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=2a032d22a4688508' in the context
'LoadFrom' at location 'C:\Program Files\test1\Shared.dll'.
Type B originates from 'Shared, Version=0.0.0.0, Culture=neutral,
PublicKeyToken=2a032d22a4688508' in the context 'Default' at location .
'C:\Program Files\test2\Shared.dll'
スローされた例外の理由は理解していますが、必要なタイプ、つまり動的にロードされた dll からインスタンスをサーバーとしてキャストする方法はありますか?