Программирование >>  Дополнения add-ins 

1 ... 4 5 6 [ 7 ]


На рис. 36.3 вы можете видеть рядом со списком доступных дополнений кнопку Activate (Активизировать). Щелчок на этой кнопке вызывает метод-обработчик ActivateAddIn(). При такой реализации дополнение активизируется вызовом метода Activate() класса AddInToken. Здесь дополнение загружается в новый процесс, созданный классом AddInProcess. Этот класс запускает процесс AddInProcess32.exe. Установка свойства KeepAlive процесса в false останавливает процесс, как только сборщик мусора уберет последнюю ссылку на дополнение. Параметр AddInSecurityLevel.Internet устанавливает ограниченные права запускаемому дополнению. Последний оператор ActivateAddIn() вызывает метод LastOperations(), который, в свою очередь, вызывает метод GetOperations() до полнения. GetOperations() присваивает возвращенный список контексту данных ListBox listOperations для отображения всех операций.

private void ActivateAddIn(object sender, RoutedEventArgs e)

FrameworkElement el = sender as FrameworkElement;

Trace.Assert(el != null, ActivateAddIn invoked from the wrong + control type );

AddInToken addIn = el.Tag as AddInToken; Trace.Assert(el.Tag != null, String.Format(

An AddInToken must be assigned to the Tag property +

of the control {0} , el.Name); AddInProcess process = new AddInProcess(); process.KeepAlive = false;

activeAddIn = addIn.Activate<Calculator> (process,

AddInSecurityLevel.Internet); ListOperations();

void ListOperations() {

this.listOperations.DataContext = activeAddIn.GetOperations();

После активизации дополнения и отображения списка операций в пользовательском интерфейсе, пользователь может выбрать операцию. Событию Click элемента Button, показанного в категории Operations, назначается метод-обработчик OperationSelected(). В его реализации объект Operation, присвоенный свойству Tag элемента Button, извлекается для получения количества операндов, необходимых для выбранной операции. Чтобы позволить пользователю добавлять значения операндам, массив объектов OperandUI привязывается к ListBox listOperations.

private void OperationSelected(object sender, RoutedEventArgs e) {

FrameworkElement el = sender as FrameworkElement; Trace.Assert(el != null, OperationSelected invoked from +

the wrong control type ); Operation op = el.Tag as Operation; Trace.Assert(el.Tag != null, String.Format(

An AddInToken must be assigned to the Tag property +

of the control {0} , el.Name); currentOperation = op;

ListOperands(new double[op.NumberOperands]);

private class OperandUI {

public int Index { get; set; } public double Value { get; set; }



void ListOperands(double[] operands)

this.listOperands.DataContext =

operands.Select((operand, index) => new OperandUI()

{ Index = index + 1, Value = operand }).ToArray();

Метод Calculate() вызывается событием Click кнопки Calculate (Вычислить). Здесь операнды извлекаются из пользовательского интерфейса, операция и операнды передаются методу Operate() дополнения, а результат отображается в содержимом метки.

private void Calculate(object sender, RoutedEventArgs e) {

OperandUI[] operandsUI = (OperandUI[])this.listOperands.DataContext; double[] operands = operandsUI.Select(opui => opui.Value).ToArray(); labelResult.Content = activeAddIn.Operate(currentOperation, operands);

Дополнительные дополнения

На этом вся трудная работа закончена. Компоненты канала и хост-приложение созданы. Канал работает, и добавление к хост-приложению новых дополнений, таких как Advanced Calculator, показанный в следующем фрагменте кода, становится простой задачей.

[AddIn( Advanced Calc , Publisher = Wrox Press , Version = 1.1.0.0 ,

Description = Another AddIn Sample )] public class AdvancedCalculatorV1 : Calculator

Резюме

В этой главе были представлены концепции новой технологии .NET 3.5: каркаса управляемых дополнений (Managed Add-In Framework - MAF).

MAF использует концепцию канала для обеспечения независимости между сборками принимающего хост-приложения и дополнений. Четко определенный контракт отделяет представление хоста от представления дополнения. Адаптеры обеспечивают возможность обеим сторонам изменяться независимо друг от друга.

Следующая глава - первая из трех, посвященных разработке пользовательского интерфейса с ASP.NET.



1 ... 4 5 6 [ 7 ]

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика