Вход/Регистрация
ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
вернуться

Троелсен Эндрю

Шрифт:

Тип CompanyInfoAttribute является пользовательским атрибутом, который будет применяться к любому типу класса, размещаемому в контейнере. Исходя из определения этого класса, можно утверждать, что [CompanyInfo] позволяет разработчику расширения сообщить информацию о происхождении подключаемого компонента.

Создание подключаемого компонента в C#

Теперь нужно создать тип, реализующий интерфейс IAppFunctionality. Снова, чтобы сосредоточиться на процессе создания расширяемого приложения, здесь предполагается создание самого простого типа. Мы построим библиотеку программного кода C# с именем CSharpSnapIn, которая определит тип класса с именем CSharpModule. Поскольку этот класс должен использовать типы, определенные в CommonSnappableTypes, нам придется установить ссылку на соответствующий двоичный файл (а также на System.Windows.Forms.dll, чтобы выводить необходимые сообщения). С учетом сказанного предлагается использовать следующий программный код.

using System;

using CommonSnappableTypes;

using System.Windows.Forms;

namespace CSharpSnapIn {

 [CompanyInfo(Name = "Intertech Training",

Url = www.intertechtraining.com)]

 public class TheCSharpModule: IAppFunctionality {

void IAppFunctionality.DoIt {

MessageBox.Show("Вы только что подключили блок C#!");

}

 }

}

Обратите внимание на то, что здесь используется явная реализация интерфейса IAppFunctionality. Это не обязательно, но идея в том, что единственной частью системы, которой понадобится непосредственное взаимодействие с этим. типом интерфейса, является наше расширяемое приложение Windows.

Создание подключаемого компонента в Visual Basic .NET

Теперь, чтобы имитировать стороннего производителя, предпочитающего использовать не C#, a Visual Basic .NET, создадим в Visual Basic .NET новую библиотеку программного кода (VbNetSnapIn), которая будет ссылаться на те же внешние компоновочные блоки, что и CSharpSnapIn. Программный код (снова) будет пред-намерено очень простым.

Imports System.Windows.Forms

Imports CommonSnappableTypes

‹CompanyInfo(Name:="Chucky's Software", Url:="‹www.ChuckySoft.com")› _

Public Class VbNetSnapIn Implements IAppFunctionality

 Public Sub DoIt Implements CommonSnappableTypes.IAppFunctionality.DoIt

MessageBox.Show("Вы только что подключили блок VB .NET!")

 End Sub

End Class

Говорить здесь особенно не о чем. Однако обратите внимание на то, что синтаксис применения атрибутов в Visual Basic .NET предполагает использование угловых (‹›), а не квадратных ([]) скобок.

Создание расширяемого приложения Windows Forms

Заключительным шагом будет создание приложения Windows Forms, которое позволит пользователю выбрать подключаемый блок с помощью стандартного диалогового окна открытия файла Windows. Создав новое приложение Windows Forms (с именем MyExtendableApp), добавите ссылку на компоновочный блок CommonSnappableTypes.dll, но не устанавливайте ссылок на библиотеки программного кода CSharpSnapIn.dll и VbNetSnapIn.dll. Помните о том, что целью создания этого приложения является демонстрация динамического связывания и отображения при выяснении возможности подключения независимых двоичных блоков, созданных сторонними производителями.

Снова подчеркнем, что здесь не рассматриваются детали процесса построения приложений Windows Forms. Тем не менее, предполагается, что вы поместите компонент MenuStrip в окно формы и определите с его помощью меню Сервис, которое будет содержать единственный пункт Подключаемый модуль (рис. 12.11).

Рис. 12.11. Исходный графический интерфейс MyExtendableApp

Эта форма Windows должна также содержать тип Listbox (которому здесь назначено имя lstLoadedSnapIns), используемый для отображения имен подключаемых модулей, загружаемых пользователем. На рис. 12.12 показан окончательный вид графического интерфейса приложения, о котором идет речь.

Рис. 12.12. Окончательный вид графического интерфейса MyExtendableApp

Программный код для обработки выбора Сервис->Подключаемый модуль из меню (этот программный код можно создать с помощью двойного щелчка на пункте меню в окне проектирования формы), отображает диалоговое окно Открытие файла и читает путь к выбранному файлу. Соответствующая строка пути затем посылается вспомогательной функции LoadExternalModule для обработки. Метод возвращает false (ложь), если он не обнаруживает класс, реализующий IAppFunctionality.

private void snapInModuleToolStripMenuItem_Click(object sender, EventArgs e) {

 // Позволяет пользователю выбрать компоновочный блок для загрузки.

 OpenFileDialog dlg = new OpenFileDialog;

 if (dlg.ShowDialog == DialogResult.OK) {

if (LoadExternalModule(dlg.FileName) == false) MessageBox.Show("Нет реализации IAppFunctionality!");

 }

}

Метод LoadExternalModule решает следующие задачи.

  • Читать дальше
  • 1
  • ...
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: