将外部程序集加载到新的应用程序域中并调用 "base class"



我是.NET远程处理的新手(我相信这与此有关(。

假设主应用程序引用了一个类库a,该类库包含一个具有抽象方法的抽象类。

现在,假设我们创建了一个全新的项目B并引用同一个DLLA,创建一个继承抽象类并实现该方法的新类。

是否可以将此新程序集加载到主应用程序中的新appdomain中,并在只知道基类类型的情况下创建实例?

或者有更好的方法吗?我在考虑某种插件系统。

编辑:对于反射,我们可以找到继承基类的类型,然后使用(BaseClass(Activator.CreateInstance(ParentType(;而不必知道ParentType

当然可以。这将从具有源自IPlugin的类型的外部部件打印2147483647。IPlugin在您的主域中定义:

var asy = Assembly.LoadFrom("yourChildAssembly.dll");
List<Type> availablePlugIns = asy.GetTypes().Where(t => !t.IsAbstract && typeof(IPlugin).IsAssignableFrom(t)).ToList();
var myPluginType = availablePlugIns.FirstOrDefault();
if (myPluginType != null)
{
IPlugin pluginInstance = (IPlugin)System.Activator.CreateInstance(myPluginType); 
pluginInstance.MyPluginMethod();
}

使用的样本类型:

public interface IPlugin
{
int MyPluginMethod();
}
public class MyPluginClass : IPlugin
{
public int MyPluginMethod()
{
return int.MaxValue;
}
}

这个例子只是一个快速的&像类这样有限制的脏解决方案应该有一个无参数的构造函数来实例化。但你可以把它作为一个起点。

编辑:我使用了和接口,但它也适用于抽象类

相关内容

最新更新