Использование атрибутов ExtensionApplication и CommandClass

    Когда AutoCAD загружает управляемое приложение, он опрашивает сборку приложения на предмет наличия пользовательского атрибута ExtensionApplication. Если этот атрибут найден, AutoCAD устанавливает ассоциированный в атрибуте тип (указан в параметре атрибута) как точку входа приложения. Если никакой такой атрибут не найден, AutoCAD ищет все экспортируемые типы реализующие интерфейс IExtensionApplication. Если реализация этого интерфейса не найдена, AutoCAD просто пропускает специализированный шаг инициализации.

    Атрибут ExtensionApplication может быть присоединен только к одному типу. Тип, к которому присоединён этот атрибут, должен реализовывать интерфейс IExtensionApplication.

    В дополнение к поиску реализации IExtensionApplication AutoCAD опрашивает сборку приложения для одного или более атрибутов CommandClass. Если экземпляры этого атрибута найдены, тогда AutoCAD ищет методы команд только в тех типах, которые указаны в параметрах этих атрибутов. Иначе, это ищет все экспортируемые типы. 

    Атрибут CommandClass может быть объявлен для любого типа, который в своём составе определяет обработчики команд AutoCAD. Если приложение использует атрибут CommandClass, оно должно объявить экземпляр этого атрибута для каждого типа, который содержит метод обработчика команды AutoCAD.

    Следующая процедура описывает, как эти атрибуты используются.

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

  1. Определите тип, который реализует интерфейс Autodesk. AutoCAD.Runtime.IExtensionApplication. Если Вы не должны выполнять инициализацию или задачи завершения - обеспечьте пустые реализации интерфейсных методов.
  2. В контексте сборки (assembly) объявите атрибут ExtensionApplication.
  3. Передайте атрибуту ExtensionApplication в качестве параметра тип, который реализует интерфейс IExtensionApplication.
  4. В контексте сборки объявите атрибут CommandClass для каждого класса, который определяет методы команд AutoCAD.
  5. Передайте атрибуту CommandClass в качестве параметра тот тип класса, который содержит в себе методы команд.
    Эти атрибуты должны быть объявлены в контексте сборки. Следующий фрагмент кода, написанного на VB .NET, взят из примера samples\dotNet\HelloWorld\HelloWorld.vb (из ObjectARX 2009), демонстрирует корректное размещение и синтаксис для объявления этого атрибута:

Код VB.NET

   1:  ...
   2:  Imports Autodesk.AutoCAD.Runtime
   3:  Imports Autodesk.AutoCAD.Interop
   4:  Imports Autodesk.AutoCAD.ApplicationServices
   5:  Imports Autodesk.AutoCAD.DatabaseServices
   6:   
   7:  <Assembly:
   8:  ExtensionApplication(GetType(HelloWorld.HelloWorldApp))> 
   9:  <Assembly: CommandClass(GetType(HelloWorldCommands))>
  10:   
  11:  Namespace HelloWorld
  12:   
  13:   Public Class HelloWorldApp
  14:   Implements Autodesk.AutoCAD.Runtime.IExtensionApplication
  15:  ...
  16:  Public Class HelloWorldCommands
  17:   
  18:      ' Defines a command that prompts a message on the AutoCAD
  19:      ' command line.
  20:      <Autodesk.AutoCAD.Runtime.CommandMethod("HELLO")> 
  21:      Public Function HelloCommand()
  22:  ...

    В C# синтаксис объявления атрибута следующий:

   1:  [assembly: CommandClass(typeof(HelloWorldCommands))]


Comments