在另一个AppDomain C#

时间:2015-12-17 21:23:24

标签: c# plugins appdomain marshalbyrefobject

我在尝试在新的AppDomain中运行.dll时遇到了困难。我的对象始终是System.MarshalByRefObject类型,所以我无法从插件中获取方法。

我现在拥有的是一个插件,它实现了一个接口并扩展了MarshalByRefObject,如下所示:

public interface IPlugin
{
    string Name { get; }
    string Description { get; }
    string Author { get; }
    void Execute();
}

然后我的插件实现如下:

[Serializable]
public class IPPlugin : MarshalByRefObject, IPlugin
{
    public string Author
    {
        get
        {
            return "John John";
        }
    }

    public string Description
    {
        get
        {
            return "description";
        }
    }

    public string Name
    {
        get
        {
            return "name";
        }
    }

    public void Execute()
    {
    //do stuff here
    }
}

所以我构建了插件,获取了dll,将其放在一个文件夹中,现在在我的项目中我试图像这样加载它:

AppDomain domain = AppDomain.CreateDomain("PluginDomain");
Object obj = domain.CreateInstanceFromAndUnwrap(path + "\\" + plugins[option].getAssemblyName(), plugins[option].getTypeName());

Console.WriteLine(obj.GetType());

if (RemotingServices.IsTransparentProxy(obj))
{
    Type type = obj.GetType();
    MethodInfo Execute = type.GetMethod("Execute");
    Execute.Invoke(obj, null); //crashes here
}

但它在Execute.Invoke(...)上崩溃,因为它不知道方法Execute,因为该对象类型错误。

错误信息是:

  

未处理的异常:System.NullReferenceException:未将对象引用设置为对象的实例。

0 个答案:

没有答案