Я работаю над надстройкой visual studio 2008, которая будет генерировать код доступа к данным, просмотрев подпись метода в сочетании с набором опций, которые пользователь вводит в диалог.ITypeResolutionService не разрешает любые типы
Для анализа сигнатуры метода я использую ITypeResolutionService визуальной студии для поиска типа, который существует в текущем проекте, в проектах, на которые делается ссылка, или в ссылочных сборках.
Для этого я создал следующие функциональные возможности:
private ITypeResolutionService _typeResolutionService;
private ITypeDiscoveryService _typeDiscoveryService;
/// <summary>
/// Initializes a new instance of the TypeResolver class.
/// </summary>
public TypeResolver(VisualStudioServiceProvider serviceProvider, Project project)
{
IVsSolution solution = serviceProvider.GetService<IVsSolution>();
DynamicTypeService typeResolver = serviceProvider.GetService<DynamicTypeService>();
IVsHierarchy hierarchy = null;
solution.GetProjectOfUniqueName(project.UniqueName, out hierarchy);
_typeResolutionService = typeResolver.GetTypeResolutionService(hierarchy);
_typeDiscoveryService = typeResolver.GetTypeDiscoveryService(hierarchy);
}
/// <summary>
/// Resolves a type in the current solution
/// </summary>
/// <param name="name">Name of the type to resolve</param>
/// <returns>Returns the resolved type; otherwise null</returns>
public Type Resolve(string name)
{
return _typeResolutionService.GetType(name, true);
}
Это разрешить необщего типов, но, к сожалению, не работает в общих типов. Есть ли у кого-нибудь идея о том, как получить вышеприведенный фрагмент, работающий и для общих типов?
Это правильно, однако я указать следующий тип, чтобы решить: «System.Collections.ObjectModel.Collection» Это Безразлично» t разрешить правильно. Применяя только что описанную логику, я также пробовал следующее: «System.Collections.ObjectModel.Collection'1 [[MyNamespace.Client]]" Это, однако, не работает. –
Если я правильно понимаю метод GetType, он не принимает исполняемый экземпляр в качестве параметра, а скорее имя типа. Я не вижу, как это будет переводиться в исполняемый экземпляр. Метод GetType, скорее всего, отражает определение класса для получения информации о типе. –
Я обнаружил, что когда я впервые вызываю Resolve («MyNamespace.Client») и разрешаю System.Collections.ObjectModel.Collection'1 [[MyNamespace.Client]] после этого, он работает, и я получаю правильный тип. Похоже, что сборка для общего аргумента не загружена. –