2012-04-25 43 views
1

你好我有這個代碼工作從我的解決方案中的項目加載dll。 Dll現在處於另一種解決方案中。從另一個解決方案動態加載dll

public void LoadCalculationExpert(string pathToExpert) 
{ 
    var assembly = Assembly.LoadFrom(pathToExpert); 
    var type = assembly.GetType("Expert.CalculationExpert"); 
    var calculationExpert = (ICalculationExpert)Activator.CreateInstance(type); 
    this._container.RegisterInstance(calculationExpert, new ContainerControlledLifetimeManager()); 
} 

該Dll執行完全相同的接口ICalculationExpert。事實上,我將接口複製到另一個解決方案。所以我知道演員應該工作,因爲它是一個實現相同接口的對象。

事情是它拋出我無效的演員異常。

我的猜測是在另一個命名空間中的接口擰上了演員。

CalculationExpertICalculationExpertnamespace Expert在另一個解決方案。 ICalculationExpert在我的解決方案中是namespace GSoft.Sons.Bll.ScoreExpert

任何想法或資源我可以讀?

回答

0

通過OOP原則將接口複製到您的解決方案不會使其完全相同。如果你有權訪問dll(具有ICalculationExpert接口的名稱空間專家),爲什麼不在你的解決方案中添加dll引用,通過它你可以從名稱空間專家實現相同的接口。

+1

或者在單獨的程序集中提供接口,並在兩個解決方案中引用dll並實現接口。 – 2012-04-25 13:52:11

+0

這就是我通常所做的。不幸的是,我加載的DLL中的代碼是祕密的。我給他們的界面,他們實現它。然後我必須加載他們的dll與接口。我無法預先知道它們的接口或類是什麼名稱空間。我唯一知道的是它們的接口與我的接口相同。 – Xavier 2012-04-25 13:55:57

+0

我希望這會給你一個解決方案http://stackoverflow.com/questions/3116694/invalidcastexception-of-a-activator-createinstance-object-during-an-installation – 2012-04-25 14:30:59

相關問題