考虑 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 是一个在我动态加载到构造函数中的程序集中定义的类。那么,我可以以某种方式解析 ExportedClass 的类型,这样我就不必使用 dynamic 吗?

最佳答案

你有的一些选择是

  • 引用实际程序集(在您动态加载它时可能无法实现),
  • 使用类型实现的共享接口(interface)(仅当您可以编辑加载的程序集时),
  • 或使用动态/反射

  • 我通常会使用第二种方法。只需定义一个 ExportedClass 在另一个(共享)程序集中实现的接口(interface)。然后您可以尝试将创建的实例转换为该接口(interface)。像那样:
    ISomeInterface obj = Activator.CreateInstance(typeOfClass) as ISomeInterface;
    

    当然,这是假设您可以控制引用的库。或者,如果您正在定义插件基础设施或类似的东西,您应该将其作为要求包含在内。

    关于c# - 从通过反射加载的程序集中动态解析类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9210728/

    10-13 21:33