Чтение онлайн

ЖАНРЫ

Язык программирования C#9 и платформа .NET5
Шрифт:

Обратите внимание, что проект

CommonSnappableTypes
уже выбран и связанный с ним флажок отключен. Причина в том, что на него производится ссылка напрямую. Отметьте также флажки для проектов
CSharpSnapIn
и
VBSnapIn
(рис. 17.4).

Теперь при каждой компиляции проекта

MyExtendableApp
будут также компилироваться проекты
CSharpSnapIn
и
VBSnapIn
.

Добавление

событий PostBuild

Откройте окно свойств проекта для

CSharpSnapIn
(щелкнув правой кнопкой мыши на имени проекта в окне Solution Explorer и выбрав в контекстном меню пункт Properties (Свойства)) и перейдите в нем на вкладку Build Events (События при компиляции). Щелкните на кнопке Edit Post-build (Редактировать события после компиляции) и затем щелкните на Macros>> (Макросы). Здесь вы можете видеть доступные для использования макросы, которые ссылаются на пути и/или имена файлов. Преимущество применения этих макросов в событиях, связанных с компиляцией, заключается в том, что они не зависят от машины и работают с относительными путями. Скажем, кто-то работает в каталоге по имени
c-sharp-wf\code\chapterl7
. Вы можете работать в другом каталоге (вероятнее всего так и есть). За счет применения макросов инструмент MSBuild всегда будет использовать корректный путь относительно файлов
*.csproj
.

Введите в области PostBuild (После компиляции) следующие две строки:

copy $(TargetPath) $(SolutionDir)MyExtendableApp\$(OutDir)$(TargetFileName) /Y

copy $(TargetPath) $(SolutionDir)MyExtendableApp\$(TargetFileName) /Y

Сделайте то же самое для проекта

VBSnapin
, но здесь вкладка в окне свойств называется Compile (Компиляция) и на ней понадобится щелкнуть на кнопке Build Events (События при компиляции).

Когда показанные выше команды событий после компиляции добавлены, все сборки при каждой компиляции будут копироваться в каталог проекта и выходной каталог приложения

MyExtendableApp
.

Построение сборки CommonSnappableTypes.dll

Удалите стандартный файл класса

Class1.cs
из проекта
CommonSnappableTypes
, добавьте новый файл интерфейса по имени
AppFunctionality.cs
и поместите в него следующий код:

namespace CommonSnappableTypes

{

public interface IAppFunctionality

{

void DoIt;

}

}

Добавьте файл класса по имени

CompanyInfoAttribute.cs
и приведите его содержимое к такому виду:

using System;

namespace CommonSnappableTypes

{

[AttributeUsage(AttributeTargets.Class)]

public sealed class CompanyInfoAttribute : System.Attribute

{

public string CompanyName { get; set; }

public string CompanyUrl { get; set; }

}

}

Тип

IAppFunctionality
обеспечивает полиморфный интерфейс для всех оснасток, которые могут потребляться расширяемым приложением. Учитывая, что рассматриваемый пример является полностью иллюстративным, в интерфейсе определен единственный метод под названием
DoIt
.

Тип

CompanyInfoAttribute
— это специальный атрибут, который может применяться к любому классу, желающему подключиться к контейнеру. Как несложно заметить по определению класса,
[CompanyInfо]
позволяет разработчику оснастки указывать общие сведения о месте происхождения компонента.

Построение оснастки на C#

Удалите стандартный файл

Class1.cs
из проекта
CSharpSnapIn
и добавьте новый файл по имени
CSharpModule.cs
. Поместите в него следующий код:

using System;

using CommonSnappableTypes;

namespace CSharpSnapIn

{

[CompanyInfo(CompanyName = "FooBar", CompanyUrl = "www.FooBar.com")]

public class CSharpModule : IAppFunctionality

{

void IAppFunctionality.DoIt

{

Console.WriteLine("You have just used the C# snap-in!");

}

}

}

Обратите внимание на явную реализацию интерфейса

IAppFunctionality
(см. главу 8). Поступать так необязательно; тем не менее, идея заключается в том, что единственной частью системы, которая нуждается в прямом взаимодействии с упомянутым интерфейсным типом, будет размещающее приложение. Благодаря явной реализации интерфейса
IAppFunctionality
метод
DoIt
не доступен напрямую из типа
CSharpModule
.

Построение оснастки на Visual Basic

Теперь перейдите к проекту

VBSnapIn
. Удалите файл
Class1.vb
и добавьте новый файл по имени
VBSnapIn.vb
. Код Visual Basic столь же прост:

Imports CommonSnappableTypes

<CompanyInfo(CompanyName:="Chucky's Software", CompanyUrl:="www.ChuckySoft.com")>

Public Class VBSnapIn

Implements IAppFunctionality

Public Sub DoIt Implements CommonSnappableTypes.IAppFunctionality.DoIt

Console.WriteLine("You have just used the VB snap in!")

End Sub

End Class

Как видите, применение атрибутов в синтаксисе Visual Basic требует указания угловых скобок (

<>
), а не квадратных (
[]
). Кроме того, для реализации интерфейсных типов заданным классом или структурой используется ключевое слово
Implements
.

Поделиться с друзьями: