C# 在运行时从 DLL 加载接口(不是类)

本文关键字:接口 加载 运行时 DLL | 更新日期: 2023-09-27 18:32:36

在stackoverflow上,有很多关于如何在运行时从DLL加载类的好答案。但是,它们似乎都暗示在编译时,加载应用程序和 DLL 都知道类实现的接口。因此问题来了:知道名称后,是否可以从 DLL 而不是实现它的类加载接口?

C# 在运行时从 DLL 加载接口(不是类)

您可以尝试类似插件的方法:目标 DLL 中的一个已知(相当预期)类,用于为您解析实现。这样,只有实现 DLL 必须知道实现。

托管扩展性框架为您提供了此功能。

public interface IWorker
{
    void DoWork();
}
// wrap engineer in engineering.dll
public class Engineer:IWorker
{
    public void DoWork(){...}
}
// wrap Chef in logistics.dll
public class Chef:IWorker
{
    public void DoWork(){...}
}
// and now load interface from dll
IWorker LoadWorkerInterface(string libName, string typeName)
{
    Assembly assy=Assembly.LoadFrom(libName);
    Type t=assy.GetType(typeName);
    return Activator.CreateInstance(t) as IWorker;
}