我有一个包含继承自 ToBeProcessed 的类 RD_ToBeProcessed 的程序集。这些类位于单独的程序集中。
我使用 createInstance 加载一个对象,然后尝试使用以下代码对其进行转换:
private Type tbpType = null;
public ToBeProcessed getToBeProcessedObject(string data)
{
// The data is passed in so that the fields are populated with the
// correct data.
if (tbpType==null){
Assembly assembly =
Assembly.LoadFrom("c:\\project\\RD_ToBeProcessed.dll");
tbpType = assembly.GetType("myNameSpace.RD_ToBeProcessed");
}
Object tbp = Activator.CreateInstance(tbpType,data);
// This line throws an error
return (ToBeProcessed)tbp;
}
这是问题的重复 .NET: Unable to cast object to interface it implement but I don't know how to resolve it。
抛出的错误是
无法将“myNameSpace.RD_ToBeProcessed”类型的对象转换为“myNameSpace.ToBeProcessed”类型。
接受的答案表明问题是基础组件的 2 个不同版本。但我使用了 ILSpy 和应用程序目录中的 ToBeProcessed dll,以及与 RD_ToBeProcessed 报告位于同一目录中的一个:
待处理,版本=1.0.4336.31676,文化=中性,PublicKeyToken=null
所以我不确定我做错了什么。我应该将 ToBeProcessed 更改为应用程序和插件中使用的接口(ItoBeProcessed)吗?然后有一个单独的程序集来保存基础 ToBeProcessed 类,该类根本不会被应用程序引用(只是 by 插件)?
编辑:通过使用接口类解决了这个问题。我仍然不知道出了什么问题,但 Kol 的回答表明,理论上这应该可以正常工作。