Escribo una plantilla T4 en Visual Studio 2010 y estoy generando código basado en clases existentes en un proyecto. El código que necesito generar depende de los argumentos de tipo genérico de la interfaz que implementan las clases, pero no veo una forma de acceder a esa información a través de la automatización central EnvDTE de Visual Studio. Aquí está un ejemplo de una clase que necesito para analizar:¿Cómo obtener los parámetros de tipo genérico para un ENVDTE CodeInterface?
public class GetCustomerByIdQuery : IQuery<Customer>
{
public int CustomerId { get; set; }
}
partir de esta definición Quiero generar código (usando T4) que tiene este aspecto:
[OperationContract]
public Customer ExecuteGetCustomerByIdQuery(GetCustomerByIdQuery query)
{
return (Customer)QueryService.ExecuteQuery(query);
}
Actualmente, el código en mi plantilla de T4 se ve un poco como esto:
CodeClass2 codeClass = GetCodeClass();
CodeInterface @interface = codeClass.ImplementedInterfaces
.OfType<CodeInterface>()
.FirstOrDefault();
// Here I want to do something like this, but this doesn't work:
// CodeClass2[] arguments = @interface.GetGenericTypeArguments();
Pero cómo consigo los argumentos de tipo genérico de un CodeInterface
?
¿por qué no TYPE [] = @ tipos interface.GenericTypeArguments() '? –
@Cuong: ¿Y cómo obtengo esa instancia de Tipo de la interfaz exactamente? No olvide que la interoperabilidad de Visual Studio funciona con instancias 'CodeClass', no con' Type'. – Steven
Tengo el mismo problema, pero es peor porque ImplementedInterfaces tiene un recuento de 0. Tiene que haber una forma mejor de obtener los genéricos en una implementación de clase ... –