Инкапсуляция компонентов C # GUI в DLL

#c# #user-interface #dll

#c# #пользовательский интерфейс #dll

Вопрос:

Мне поручено разработать систему, состоящую из 1) графического интерфейса, который обрабатывает связь с устройством, и 2) библиотек DLL, которые представляют режимы, в которых будет работать устройство.

Для каждого режима требуются разные детали конфигурации, поэтому идея состоит в том, чтобы каждая DLL содержала метод для создания панели управления, заполненной элементами управления, которая может быть размещена в GUI.

Моя работа в C # до сих пор была немного менее сложной, и я не уверен, как реализовать такого рода функциональность. Мне не удалось найти справку или примеры реализации такого рода. Может кто-нибудь указать мне правильное направление?

Ответ №1:

Вам понадобится базовая библиотека dll, в которой есть ваши интерфейсы и базовые классы. Затем другие DLL будут ссылаться на эту базовую dll и расширять / выводить / реализовывать эти базовые классы / интерфейсы.

Например, если у вас есть dll (Base.dll ) который имеет интерфейс, подобный:

 public interface CoolGui {
  void DrawGui(Graphics g); 
}
  

Затем ваши две другие DLL (One.dll и Two.dll ) будет ссылаться Base.dll и внедряют CoolGui в свой пользовательский интерфейс.

Редактировать:

И, конечно, вам нужно будет динамически загружать вашу DLL и использовать отражение, чтобы получить правильные экземпляры вашего интерфейса / базового класса. Вот статья codeproject, которая поможет:http://www.codeproject.com/KB/cs/DynLoadClassInvokeMethod.aspx

Комментарии:

1. Я ценю ответы! Моей целью было написать графический интерфейс в виде EXE-файла, который имеет класс для обработки связи с устройством и имеет одну DLL для каждого режима работы. У каждой DLL был бы метод, который возвращал бы панель GUI, заполненную элементами управления GUI. Именно с этим методом у меня возникли проблемы.

2. Это нормально, вам понадобится базовая dll, которая определяет все общие элементы интерфейса. Убедитесь, что это общедоступные классы, и тогда другим вашим DLL просто нужно наследовать от этого. Что касается exe, он загрузит все DLL-файлы в заданный каталог, затем использует отражение для загрузки соответствующих классов из этих DLL.

Ответ №2:

Вы имеете в виду, что хотите иметь возможность динамически загружать библиотеки DLL? Проверьте сборку.Загрузочный файл. Оттуда вы можете использовать его элементы и getMember для динамической загрузки статических элементов из классов в DLL. Я предлагаю вызвать метод, который вернет общий интерфейс (на который ссылаются обе программы) или что-то в этом роде, потому что без этого может быть сложно обойти.