0

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

4

2 回答 2

1

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

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

于 2013-09-23T12:38:24.297 回答
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;
}
于 2014-11-11T16:28:12.570 回答