AssemblyResolver — класс
Класс AssemblyResolver
реализует функцию загрузки сборок Docsvision из каталога установки Windows-клиента в runtime
программы.
-
Пространство имён:
DocsVision.Platform
-
Сборка:
DocsVision.Platform.dll
Синтаксис
[ComVisible(true)]
[Guid("230DA85B-DC28-479E-B0B8-62E05C8E3065")]
public class AssemblyResolver
Конструкторы
Имя | Описание |
---|---|
|
Инициализирует новый экземпляр класса AssemblyResolver. |
Методы
Имя | Описание |
---|---|
|
Регистрирует указанный каталог в список каталогов, из которых могут быть загружены требуемые сборки. |
|
Разрегистрирует указанный каталог со сборками. |
|
Активирует функцию предоставления сборок из зарегистрированных каталогов со сборками. Автоматически вызывается из конструктора класса |
|
Останавливает функцию предоставления сборок из зарегистрированных каталогов. |
Заметки
Функциональность, реализуемую классом AssemblyResolver
, позволяет получать сущности из клиентских сборок Docsvision без необходимости загрузки этих сборок в каталог программы и GAC. Windows-клиент должен быть установлен.
Метод в StartResolve
подписывается на событие AppDomain.CurrentDomain.AssemblyResolve
и при необходимости предоставляет сборки, размещенные в каталоге клиента Docsvision и зарегистрированных каталогах.
Конструктор класса AssemblyResolver
автоматически вызывает метод StartResolve
, поэтому отдельно вызывать его не требуется.
В каталоги со сборками по умолчанию добавляется каталог установки Windows-клиента.
Для использования типов API Docsvision в программе потребуется разместить соответствующие сборки Docsvision в каталоге программы.
Примеры
Следующие код демонстрирует пример использования AssemblyResolver
.
using System;
using System.IO;
using System.Reflection;
using Microsoft.Win32;
namespace ObjectContextSample
{
internal static class ResolverInstance
{
private const string ClientRootKey = @"SOFTWARE\DocsVision\Platform\Client";
private const string ClientBasePathValue = "BasePath";
private static readonly Guid ResolverClsId = new Guid("230DA85B-DC28-479E-B0B8-62E05C8E3065");
private const string DocsVisionPlatformAssembly = "DocsVision.Platform.dll";
private const string AssemblyResolverTypeName = "DocsVision.Platform.AssemblyResolver";
private static object resolver;
public static void CreateResolver()
{
if (resolver != null)
return;
try
{
resolver = Activator.CreateInstance(Type.GetTypeFromCLSID(ResolverClsId)); (1)
}
catch
{
}
if (resolver != null)
return;
string basePath = GetResolverBasePath();
if (string.IsNullOrEmpty(basePath))
return; (2)
try
{
Assembly resolverAssembly = Assembly.LoadFrom(Path.Combine(basePath, DocsVisionPlatformAssembly));
resolver = resolverAssembly.CreateInstance(AssemblyResolverTypeName);
}
catch
{
}
}
private static string GetResolverBasePath()
{
try
{
using (RegistryKey regSettings = Registry.LocalMachine.OpenSubKey(ClientRootKey, false))
{
if (regSettings != null)
{
string basePath = (string) regSettings.GetValue(ClientBasePathValue);
if (!string.IsNullOrEmpty(basePath))
return basePath;
}
}
}
catch
{
}
try
{
using (RegistryKey regSettings = Registry.CurrentUser.OpenSubKey(ClientRootKey, false))
{
if (regSettings != null)
{
string basePath = (string) regSettings.GetValue(ClientBasePathValue);
if (!string.IsNullOrEmpty(basePath))
return basePath;
}
}
}
catch
{
}
return null;
}
}
}
1 | Создаем по CLSID. |
2 | Если не смогли, ищем по пути из реестра. |