Основной класс провайдера к хранилищу
Для возможности работы с собственными типами хранилищ разработчик должен реализовать специальный компонент — провайдер к внешнему хранилищу (далее — просто провайдер). Провайдер представляет собой библиотеку с публичным классом, в котором реализуются определённые программные интерфейсы. Набор интерфейсов определяется возможностями внешнего хранилища.
В простейшем случае, провайдер должен реализовывать два интерфейса: IBinaryStorage
и IExtensionInitialize
.
public class ExternalStorage : IBinaryStorage, IExtensionInitialize
Интерфейс IBinaryStorage
определяет основные параметры хранилища и методы провайдера: идентификатор хранилища, поддерживающий по умолчанию разделы, методы создание, чтения, удаления файлов и др. См. описание интерфейса IBinaryStorage
. Реализация методов интерфейса IBinaryStorage
определяется способом работы с внешним хранилищем.
Интерфейс IExtensionInitialize
определяет метод инициализации провайдера (Initialize
), принимающий в сериализованном виде настройки хранилища. Настройки хранилища устанавливаются с помощью графического интерфейса настройки (рассмотрено далее).
Следует обратить внимание, что сервер Docsvision может в течении пользовательской сессии многократно создавать экземпляры класса провайдера и инициализировать его, что может привести к росту потребления ресурсов, если при инициализации создаются дополнительные объекты. Данную особенность следует учитывать при создании класса провайдера.
Для более эффективной работы сервера Docsvision с хранилищем, провайдер может поддерживать интерфейс IStreamedBinaryStorage
, позволяющий серверу работать напрямую с потоками чтения/записи к хранилищу. Также может быть поддержан интерфейс IEnumerableBinaryStorage
, если провайдер может предоставить идентификаторы всех файлов, хранящихся в определённом разделе хранилища.
public class ExternalStorage : IBinaryStorage,
IExtensionInitialize,
IStreamedBinaryStorage,
IEnumerableBinaryStorage
Класс провайдера должен быть помечен атрибутом DisplayName
, содержащим название хранилища.
[DisplayName("External storage name")]
public class ExternalStorage : IBinaryStorage, IExtensionInitialize
Для использования локализованного отображаемого названия можно добавить дополнительный класс, возвращающий название из ресурсов:
class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private readonly string resourceName;
public LocalizedDisplayNameAttribute(string resourceName)
: base()
{
this.resourceName = resourceName;
}
public override string DisplayName
{
get
{
return Resource.ResourceManager.GetString(this.resourceName);
}
}
}
Тогда класс провайдера необходимо пометить атрибутом LocalizedDisplayName
с указанием ключа локализованного ресурса:
[LocalizedDisplayName("ExternalStorageName")]
public class ExternalStorage : IBinaryStorage, IExtensionInitialize
Чтобы предоставить возможность настройки провайдера с помощью Консоли настройки Docsvision, должна быть разработана графическая форма. Информация о данном компоненте приведена в разделе Графический интерфейс настройки. Название компонента графической формы должно быть указано в атрибуте Editor
класса провайдера:
[DisplayNameAttribute("ExternalStorageName")]
[Editor("ExternalStorageProvider.ProviderConfigurationPropertyControl, ExternalStorageProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e955275a11279434, processorArchitecture=MSIL",
"DocsVision.Platform.WinForms.Controls.IExtensionPropertiesControl, DocsVision.Platform.WinForms"
)]
public class ExternalStorage : IBinaryStorage, IExtensionInitialize
Editor
указываются:-
Полное название класса, в котором реализована графическая форма.
-
Название и сборка класса
IExtensionPropertiesControl
, как в примере.
Если возможность настройки не требуется, то атрибут Editor
не указывается.