2012-09-30 13 views
9

Visual Studio 2010'da bir T4 şablonu yazıyorum ve bir projede varolan sınıflara dayalı kod üretiyorum. Oluşturmam gereken kod, sınıfların uyguladığı arabirimin genel türü argümanlarına bağlıdır, ancak Visual Studio çekirdek otomasyon EnvDTE aracılığıyla bu bilgilere erişmenin bir yolunu görmüyorum. şöyle ben kod (T4 kullanarak) oluşturmak istiyorum bu tanım itibarenENVDTE CodeInterface için genel tip parametreleri nasıl alınır?

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

: Burada analiz etmek gerekir bir sınıfının bir örneğidir içinde

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

Halen kod benim T4 şablon görünüyor böyle biraz:

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

Ama CodeInterface ait genel tür bağımsız değişkenleri nasıl giriş yapabiliriz?

+0

neden olmasın' Tipi [] türleri = @ interface.GenericTypeArguments()? –

+0

@Cuong: Ve bu arayüzün Type örneğini tam olarak nasıl alabilirim? Visual Studio'nun birlikte çalışmasının 'Type' ile değil' CodeClass' örnekleri ile çalıştığını unutmayın. – Steven

+1

Aynı sorunu yaşıyorum, ancak ImplementedInterfaces 0 bir sayısı vardır daha kötüsü. Bir sınıf uygulama üzerinde jenerik almak için daha iyi bir yolu olmalı ... –

cevap

6

Pek hoş değil, ama bu benim için hile yapar: `

CodeInterface @interface; 

// FullName = "IQuery<[FullNameOfType]> 
string firstArgument = @interface.FullName.Split('<', '>')[1]; 
İlgili konular