我想創建一個對象的實例,如果我可以幫助它,我可以在我的課程的其他地方使用它,而無需經過更多的反射。從調用的對象調用方法
創建對象後(通過activator或constructorInfo,我已經閱讀了兩個參數,但使用激活因爲其較短的例子)我必須投它,但這是行不通的。
例如:
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?
您的代碼中的「服務器」與「test.dll」中的「服務器」不同嗎?或兩者指向相同的類型? –
對不起,我試圖縮短代碼,已編輯刪除test.dll,現在試圖從正確的位置加載 – user1584120
我認爲你不明白我的問題。您的代碼中的服務器與Shared.dll中的「服務器」不同?或兩者指向相同的類型? –