c# - 从通过反射加载的程序集中动态解析类型

标签 c# c#-4.0 reflection

考虑 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/

相关文章:

go - 通过 fmt.Sscan 设置结构值

C# 项目,编译器提示缺少对 log4net 的引用

image - 如何在不加载图像的情况下获取图像的尺寸

c# - dynamic 关键字是否*仅*用于动态语言?

c#-4.0 - Nuget 包还原 : . 目标上的网络版本错误

c#-4.0 - 尝试使用 POST,但 API 尝试使用 GET

python - 检测类实例变量值中的重复项

c# - 与 ListView SelectedItem 与 TextCell 命令绑定(bind)

c# - 处理器关联组 C#

c# - 通过 void 函数重置变量