考虑 DLL 中的以下代码:
public class ReceivingClass
{
private Assembly myAssembly;
private Type typeOfClass;
public ReceivingClass()
{
myAssembly = Assembly.LoadFile(@"E:\VSProjects\TestDynamicLinking\MyLib\bin\Debug\MyLib.dll");
//Can I use this type somehow to resolve the type in the below method?
typeOfClass = myAssembly.GetType("ExportedClass");
}
public bool ReceiveMethod(ExportedClass classobj)
{
return true;
}
}
所以,问题是在上面的ReceiveMethod
中,ExportedClass
是一个类,它是在我在Constructor 中动态加载的Assembly 中定义的。那么,我能否以某种方式解析 ExportedClass
的类型,这样我就不必使用 dynamic
?
最佳答案
你有一些选择是
- 引用实际程序集(在您的情况下可能无法动态加载它),
- 使用类型实现的共享接口(interface)(仅当您可以编辑加载的程序集时),
- 或者使用动态/反射
我通常会使用第二种方法。只需定义一个 ExportedClass 在另一个(共享)程序集中实现的接口(interface)。然后您可以尝试将创建的实例转换为该接口(interface)。像那样:
ISomeInterface obj = Activator.CreateInstance(typeOfClass) as ISomeInterface;
当然,这是假设您可以控制引用的库。或者,如果您要定义插件基础架构或类似的东西,则应将其作为要求包括在内。
关于c# - 从通过反射加载的程序集中动态解析类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9210728/