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
。事实上,我将接口复制到另一个解决方案。所以我知道演员应该工作,因为它是一个实现相同接口的对象。
事情是它抛出我无效的演员异常。
我的猜测是在另一个命名空间中的接口拧上了演员。
CalculationExpert
和ICalculationExpert
在namespace Expert
在另一个解决方案。 ICalculationExpert
在我的解决方案中是namespace GSoft.Sons.Bll.ScoreExpert
任何想法或资源我可以读?
或者在单独的程序集中提供接口,并在两个解决方案中引用dll并实现接口。 – 2012-04-25 13:52:11
这就是我通常所做的。不幸的是,我加载的DLL中的代码是秘密的。我给他们的界面,他们实现它。然后我必须加载他们的dll与接口。我无法预先知道它们的接口或类是什么名称空间。我唯一知道的是它们的接口与我的接口相同。 – Xavier 2012-04-25 13:55:57
我希望这会给你一个解决方案http://stackoverflow.com/questions/3116694/invalidcastexception-of-a-activator-createinstance-object-during-an-installation – 2012-04-25 14:30:59