Инициализация контекста объектов

Если в качестве базового класса для карточки используется базовая карточка DocsVision.BackOffice.WinForms.BaseCardControl, создавать и инициализировать контекст объектов нет необходимости — он доступен через свойство ObjectContext, при этом в него уже добавлены необходимые сервисы для работы с "Базовыми объектами".

Для класса, унаследованного от DocsVision.BackOffice.WinForms.ScriptClassBase, контекст объектов будет доступен через свойство base.CardControl.ObjectContext.

Пример инициализации контекста объектов, а также добавления в него основных сервисов и преобразователей данных приведён ниже.

using DocsVision.BackOffice.ObjectModel;
using DocsVision.BackOffice.ObjectModel.Mapping;
using DocsVision.BackOffice.ObjectModel.Services;
using DocsVision.Platform.Data.Metadata;
using DocsVision.Platform.ObjectManager;
using DocsVision.Platform.ObjectModel;
using DocsVision.Platform.ObjectModel.Mapping;
using DocsVision.Platform.ObjectModel.Persistence;
using DocsVision.Platform.SystemCards.ObjectModel.Mapping;
using DocsVision.Platform.SystemCards.ObjectModel.Services;

namespace ConnectDV
{
 class Program
 {
  static UserSession userSession; (1)
  static ObjectContext objectContext; (2)

  static void Main(string[] args)
  {
   CreateContext();
  }

  static void CreateContext()
  {

   string serverDocsvisionUrl = "ConnectAddress=http://localhost/DocsVision/StorageServer/StorageServerService.asmx;BaseName=SampleBase;UserName=IvanovII;Password=SamplePass"; (3)

   SessionManager sessionManager = SessionManager.CreateInstance(serverDocsvisionUrl); (4)
   userSession = sessionManager.CreateSession();

   var sessionContainer = new System.ComponentModel.Design.ServiceContainer(); (5)
   sessionContainer.AddService(typeof(DocsVision.Platform.ObjectManager.UserSession), userSession);

   objectContext = new ObjectContext(sessionContainer); (6)

   IObjectMapperFactoryRegistry mapperFactoryRegistry = objectContext.GetService<IObjectMapperFactoryRegistry>();
   mapperFactoryRegistry.RegisterFactory(typeof(SystemCardsMapperFactory)); (7)
   mapperFactoryRegistry.RegisterFactory(typeof(BackOfficeMapperFactory));

   IServiceFactoryRegistry serviceFactoryRegistry = objectContext.GetService<IServiceFactoryRegistry>();
   serviceFactoryRegistry.RegisterFactory(typeof(SystemCardsServiceFactory)); (8)
   serviceFactoryRegistry.RegisterFactory(typeof(BackOfficeServiceFactory));

   objectContext.AddService<IPersistentStore>(DocsVisionObjectFactory.CreatePersistentStore(new SessionProvider(userSession), null)); (9)

   IMetadataProvider metadataProvider = DocsVisionObjectFactory.CreateMetadataProvider(userSession); (10)
   objectContext.AddService<IMetadataManager>(DocsVisionObjectFactory.CreateMetadataManager(metadataProvider, userSession));
   objectContext.AddService<IMetadataProvider>(metadataProvider);
  }
 }
}
1 Сессия пользователя.
2 Контекст объектов.
3 Строка соединения с сервером Docsvision.
4 Подключение к серверу и открытие сессии.
5 Инициализация сервис-провайдера.
6 Инициализация контекста объектов.

В качестве контейнера может выступать компонент карточки, унаследованный от DocsVision.Platform.WinForms.CardControl.

7 Получение сервис-реестра и регистрация фабрик преобразователей.
8 Получение сервис-реестра и регистрация фабрик сервисов.
9 Регистрация сервиса для работы с хранилищем Docsvision.
10 Регистрация поставщика метаданных карточек.
Для корректной сборки необходимо подключить к проекту следующие библиотеки:
  • DocsVision.Platform.ObjectManager.dll

  • DocsVision.Platform.ObjectModel.dll

  • DocsVision.Platform.SystemCards.ObjectModel.dll

  • DocsVision.Platform.StorageServer.dll

  • DocsVision.BackOffice.ObjectModel.dll