Использование AppDomain.CreateInstanceFromAndUnwrap () - PullRequest
1 голос
/ 28 августа 2010

Я пытаюсь загрузить 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 ]

3 голосов
/ 28 августа 2010

Что вам нужно сделать, это создать объект-оболочку для создания экземпляра для вас.

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

Теперь просто создайте экземпляр DeviceManagerWrapper и захватите одиночный код DeviceManager через свойство.

0 голосов
/ 28 августа 2010

Вам необходимо создать отдельный класс точки входа с открытым конструктором, у которого есть свойство, которое возвращает экземпляр singleton.

Оба класса должны наследовать MarshalByRefObject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...