2012-09-30 2 views
9

저는 Visual Studio 2010에서 T4 템플릿을 작성 중이며 프로젝트의 기존 클래스를 기반으로 코드를 생성하고 있습니다. 생성해야하는 코드는 클래스가 구현하는 인터페이스의 제네릭 형식 인수에 따라 달라 지지만 Visual Studio 핵심 자동화 EnvDTE를 통해 해당 정보에 액세스하는 방법은 없습니다. 다음과 같습니다 I 코드 (T4를 사용)를 생성 할이 정의에서ENVDTE CodeInterface에 대한 일반 유형 매개 변수를 얻는 방법은 무엇입니까?

public class GetCustomerByIdQuery : IQuery<Customer> 
{ 
    public int CustomerId { get; set; } 
} 

: 여기에 내가 분석 할 필요가 클래스의 예에서

[OperationContract] 
public Customer ExecuteGetCustomerByIdQuery(GetCustomerByIdQuery query) 
{ 
    return (Customer)QueryService.ExecuteQuery(query); 
} 

현재, 코드 내 T4 템플릿을 보이는이 같은 비트 :

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(); 

하지만이 CodeInterface의 제네릭 형식 인수를 얻는 방법?

+0

왜 안'유형 [] 유형 = @ interface.GenericTypeArguments을()? –

+0

@Cuong : 인터페이스의 Type 인스턴스를 정확히 얻으려면 어떻게해야합니까? Visual Studio interop이'Type'이 아닌'CodeClass' 인스턴스와 함께 작동한다는 것을 잊지 마십시오. – Steven

+1

동일한 문제가 발생하지만 ImplementedInterfaces의 수가 0입니다. 클래스 구현에서 제네릭을 얻는 더 좋은 방법이 있어야합니다 ... –

답변

6

그것은 꽤 아니지만이 나를 위해 트릭을 수행합니다`

CodeInterface @interface; 

// FullName = "IQuery<[FullNameOfType]> 
string firstArgument = @interface.FullName.Split('<', '>')[1]; 
관련 문제