ReckfellExtensionManager
Загрузка и жизненный цикл нативных расширений.
Передавайте путь описания .reckfellextension, проверяйте LoadStatus и используйте одинаковое написание пути для запросов. Расширение может загрузиться автоматически ещё до _Ready, поэтому AlreadyLoaded — отдельный штатный результат.
Реестр менеджера, открытый ресурс библиотеки и корректность отдельного ABI-вызова — разные состояния. UnloadExtension удаляет регистрацию и классы, но удерживаемый ресурс может продлить жизнь самой библиотеки. Не выгружайте код, пока его объекты и callbacks ещё используются.
События загрузки/выгрузки в редакторской сборке приходят внутри перехода состояния. В частности, ExtensionLoaded при первой загрузке вызывается до вставки пути в реестр. Перезагрузка требует отдельной поддержки и не гарантирует откат после отказа.
Описание расширения и диагностика.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Свойства1
SingletonСвойство
public static ReckfellExtensionManagerInstance Singleton { get; }Объектный доступ к тому же менеджеру, который используется статическими методами. Не создаёт отдельный реестр. Не освобождайте глобальный singleton через Dispose/Free.
Методы6
GetExtensionReckfellExtension
public static ReckfellExtension GetExtension(string path);Возвращает объект по уже зарегистрированному пути. Сначала проверьте IsExtensionLoaded: отсутствующий путь даёт нативную диагностику и пустой результат. Полученная ссылка может продлить жизнь открытой библиотеки даже после удаления записи менеджером.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть .reckfellextension, не путь DLL. Для последующих запросов и выгрузки используйте то же написание пути, под которым расширение зарегистрировано.
ReckfellExtensionЗарегистрированный ReckfellExtension; отсутствующий путь возвращает null с нативной диагностикой, не гарантированным исключением C#.
GetLoadedExtensionsstring[]
public static string[] GetLoadedExtensions();Возвращает снимок путей текущего реестра. Не сканирует папки и не перечисляет все найденные описания. Порядок массива не является порядком зависимостей или инициализации.
string[]string[] путей текущего реестра; это снимок, а не живая редактируемая коллекция менеджера.
IsExtensionLoadedbool
public static bool IsExtensionLoaded(string path);Проверяет наличие точного пути в реестре менеджера. Это не проверка существования файла, совместимости всех ABI-вызовов или работоспособности функций расширения.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть .reckfellextension, не путь DLL. Для последующих запросов и выгрузки используйте то же написание пути, под которым расширение зарегистрировано.
booltrue для зарегистрированного точного пути; false после успешного удаления записи.
LoadExtensionReckfellExtensionManager.LoadStatus
public static ReckfellExtensionManager.LoadStatus LoadExtension(string path);Загружает описание .reckfellextension и инициализирует выбранную библиотеку. Проверяйте LoadStatus; расширение могло уже загрузиться до _Ready. Повтор того же зарегистрированного пути возвращает AlreadyLoaded, не вызывает повторную инициализацию. В режиме восстановления загрузка отклоняется.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть .reckfellextension, не путь DLL. Для последующих запросов и выгрузки используйте то же написание пути, под которым расширение зарегистрировано.
ReckfellExtensionManager.LoadStatusLoadStatus: Ok — загрузка выполнена; AlreadyLoaded — запись уже есть; NotLoaded возможен при пропуске по тегам; Failed — отказ. NeedsRestart не считайте готовностью к вызовам.
ReloadExtensionReckfellExtensionManager.LoadStatus
public static ReckfellExtensionManager.LoadStatus ReloadExtension(string path);Пытается перезагрузить уже зарегистрированную библиотеку. Нужны редакторская сборка, включённая перезагрузка и её поддержка расширением. Операция не транзакционная: отказ после закрытия старой библиотеки не гарантирует восстановление прежнего состояния. Проверяйте статус и конкретные требуемые классы/методы.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть .reckfellextension, не путь DLL. Для последующих запросов и выгрузки используйте то же написание пути, под которым расширение зарегистрировано.
ReckfellExtensionManager.LoadStatusLoadStatus результата попытки. NotLoaded — пути нет или загрузчик пропустил его; NeedsRestart — текущую инициализацию нельзя завершить без перезапуска. Failed требует проверки журнала и состояния.
UnloadExtensionReckfellExtensionManager.LoadStatus
public static ReckfellExtensionManager.LoadStatus UnloadExtension(string path);Деинициализирует расширение и удаляет запись менеджера. До вызова завершите работу объектов расширения и его callbacks. Ok не означает немедленное физическое закрытие DLL: удерживаемая ссылка на ReckfellExtension может сохранять библиотеку открытой. Режим восстановления отклоняет операцию.
| Имя | Тип | По умолчанию |
|---|---|---|
path | string | — |
pathПуть .reckfellextension, не путь DLL. Для последующих запросов и выгрузки используйте то же написание пути, под которым расширение зарегистрировано.
ReckfellExtensionManager.LoadStatusOk после деинициализации и удаления записи; NotLoaded, если путь не зарегистрирован; Failed при отказе, например в режиме восстановления.
Сигналы и события3
ExtensionLoadedСобытие
public static event ReckfellExtensionManager.ExtensionLoadedEventHandler ExtensionLoaded;Событие редакторской сборки после инициализации библиотеки. В текущем пути первой загрузки оно приходит до добавления пути в реестр менеджера: не вызывайте GetExtension(path) из обработчика в расчёте на уже вставленную запись. Используйте переданный объект и не считайте событие подтверждением всех нативных методов.
| Имя | Тип | По умолчанию |
|---|---|---|
extension | ReckfellExtension | — |
extensionОбъект расширения, переданный событием. Используйте для наблюдения; событие не передаёт вам владение жизненным циклом менеджера.
ExtensionUnloadingСобытие
public static event ReckfellExtensionManager.ExtensionUnloadingEventHandler ExtensionUnloading;Событие редакторской сборки перед деинициализацией классов и удалением записи из реестра. Обработчик получает ещё доступный объект расширения; это не уведомление о завершённом закрытии DLL. Не запускайте повторную выгрузку из этого же обработчика.
| Имя | Тип | По умолчанию |
|---|---|---|
extension | ReckfellExtension | — |
extensionОбъект расширения, переданный событием. Используйте для наблюдения; событие не передаёт вам владение жизненным циклом менеджера.
ExtensionsReloadedСобытие
public static event Action ExtensionsReloaded;Уведомление редакторского прохода обнаружения изменившихся перезагружаемых библиотек. Не является отдельным событием для каждого прямого ReloadExtension и не доказывает успешность всех попыток. Обычные LoadExtension/UnloadExtension его не вызывают.
ReckfellExtensionManager.LoadStatus
| Значение | Описание |
|---|---|
AlreadyLoaded = 2 | Расширение уже загружено. |
Failed = 1 | Расширение не удалось загрузить, возможно, потому что оно не существует или у него отсутствуют зависимости. |
NeedsRestart = 4 | Для полной загрузки расширения требуется перезапуск приложения. |
NotLoaded = 3 | Расширение не загружено. |
Ok = 0 | Расширение успешно загружено. |