Главная » C# » Организация проектов динамической загрузки в Visual C# (Sharp)

0

Для примеров этой главы определены четыре проекта:

•I Definitions — библиотека класса, содержащая определения интерфейса IDefignition И класса ConfigurationLoader. Класс ConfigurationLoader будет содержать       функциональность       для       динамической       загрузки       сборок

Implementations!ИImplementations2;

•I Implementationsi —  библиотека  класса,  Содержащая  класс  Implementation и  реализующая  интерфейс  iDefinition. Класс  implementation определяется в пространстве имен implementationsi и не является public;

• Implementations2 —  библиотека   класса,   содержащая   класс   Implementation и  реализующая  интерфейс  iDefinition. Класс  implementation определяется В пространстве имен Implementations2 И не является public;

• Са 1 lRuntimeimpiementation— консольное приложение, использующееся в гле в качестве пользовательского приложения.

На ри с 12.1 показа н проек т Definitions в Solution Explorer. Проек т Definitions ссылается на стандартные библиотеки .NET (system, System.Core и т.д.). Унальным пространством, на которое нужно сделать ссылку, является только System.configuration. Это пространство имен содержит типы для чтения файла конфигурации приложения.

Проект    implement at ions 1 показан    на    рис. 12.2.    Проект    содержит    файл ImpIementation.cs, в котором определены тип implementation и реализация интеейса iDefinitions. Реализация типа implementation выглядит таким образом:

namespace Implementationsl {

class Implementation : IDefinition {

public string TranslateWord( string word) { return ""; }

}

}

Рис. 12.1. Проект Definitions           Рис. 12.2. Проект Implementationsl

Класс Implementation содержит жесткую ССЫЛКУ на интерфейс IDefinition, птому в узле References  проекта имеется ссылка на сборку Definitions. Так как существует жесткая ссылка на интерфейс IDefinition, он объявлен public, в то время как класс Implementation — нет.

Проект impiementations2 реализован, как проект  implementationsl, и содержит ссылку на сборку Definitions. Особенностью проекта impiementations2 является использование в нем строгого имени. Все рассматриваемые до этого времени сбои не являются уникальными. Чтобы сделать их уникальными, необходимо разрить подписывание. Подписывание также необходимо разрешить в сборке Definitions. Как это сделать, описывается в следующем разделе.

Проект   CaiiRuntimeimpiementation является    пользовательским    приложением и показан на рис. 12.3. Пользовательское приложение отвечает за вызов функциальностей, предоставляемых проектами ImplementationslИ Implementations2.

Обратите внимание, что в структуре проекта CaiiRuntimeimpiementation узел References  содержит  только  сборку  Definitions. Ссылок  на  Implementationsl И Implementations2 В не м  нет.

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

загруженной сборкой можно делать все, что можно делать со сборкой, на которую имеется жесткая ссылка.

Рис. 12.3. Проект CallRuntimelmplementation

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

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