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

时间:2013-09-23 12:35:24

标签: c# dll interface loading

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

2 个答案:

答案 0 :(得分:1)

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

Managed Extensibility Framework为您提供此功能。

答案 1 :(得分:0)

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;
}