2012-09-30 20 views
9

मैं विजुअल स्टूडियो 2010 में एक टी 4 टेम्पलेट लिख रहा हूं और एक परियोजना में मौजूदा कक्षाओं के आधार पर कोड उत्पन्न कर रहा हूं। कोड जो मुझे उत्पन्न करने की आवश्यकता है, कक्षाओं को लागू करने वाले इंटरफ़ेस के जेनेरिक प्रकार तर्कों पर निर्भर करता है, लेकिन मुझे विजुअल स्टूडियो कोर ऑटोमेशन एनवीडीटीई के माध्यम से उस जानकारी तक पहुंचने का कोई तरीका नहीं दिखता है।ENVDTE CodeInterface के लिए सामान्य प्रकार पैरामीटर कैसे प्राप्त करें?

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

इस परिभाषा मैं कोड (टी -4 का प्रयोग करके) उत्पन्न करना चाहते से कि इस तरह दिखता है:: यहाँ है कि मैं विश्लेषण करने की जरूरत एक वर्ग का एक उदाहरण है

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

वर्तमान में, में कोड मेरी टी -4 टेम्पलेट लग रहा है इस तरह एक सा:

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

@ क्यूओंग: और मैं इंटरफ़ेस के उस प्रकार का उदाहरण कैसे प्राप्त करूं? यह न भूलें कि विजुअल स्टूडियो इंटरऑप 'CodeClass' उदाहरणों के साथ काम करता है, न कि 'टाइप' के साथ। – Steven

+1

मुझे एक ही समस्या है, लेकिन यह बदतर है कि कार्यान्वित इंटरफेस की संख्या 0 है। क्लास कार्यान्वयन पर जेनेरिक प्राप्त करने का एक बेहतर तरीका होना चाहिए ... –

उत्तर

6

यह बहुत नहीं है, लेकिन यह मेरे लिए काम कर देता है:()

CodeInterface @interface; 

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