C# 在运行时从 DLL 加载接口(不是类)
本文关键字:接口 加载 运行时 DLL | 更新日期: 2023-09-27 18:32:36
在stackoverflow上,有很多关于如何在运行时从DLL加载类的好答案。但是,它们似乎都暗示在编译时,加载应用程序和 DLL 都知道类实现的接口。因此问题来了:知道名称后,是否可以从 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;
}