2012-04-25 55 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

相关问题