AppDomain.CreateInstanceFromAndUnwrap()的用法

时间:2010-08-27 22:54:56

标签: c# c#-4.0

我正在尝试使用以下代码将dll加载到单独的应用程序域中:

AppDomain domain = AppDomain.CreateDomain("HardwareAbstractionLayer");            
string pathToDll = @"DeviceManagement.dll";
Type t = typeof(DeviceManager);
DeviceManager myObject = (DeviceManager)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);

我收到错误: “未找到类型'DeviceManagement.DeviceManager'上的构造函数。”

似乎dll使用单例模式,在这种情况下我不确定如何使用AppDomain函数。这是dll的构造函数代码:

private DeviceManager() { }
private static readonly DeviceManager instance = new DeviceManager();
public static DeviceManager Instance { get { return instance; } }

2 个答案:

答案 0 :(得分:3)

您需要做的是创建一个包装器对象来为您创建实例。

public sealed class DeviceManagerWrapper : MarshalByRefObject {
  public DeviceManagerWrapper(){}
  public DeviceManeger DeviceManager {
    get { return DeviceManager.Instance; }
  }
}

现在只需创建一个DeviceManagerWrapper的实例,然后通过该属性获取DeviceManager单例。

答案 1 :(得分:0)

您需要使用具有返回单例实例的属性的公共构造函数创建单独的入口点类。

两个类都必须继承MarshalByRefObject