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