10

के माध्यम से जेनेरिक प्रकारों को पंजीकृत करना मैं यूनिटी 2.0 के लिए कॉन्फ़िगरेशन फ़ाइल में एक सामान्य प्रकार को पंजीकृत करने का प्रयास कर रहा हूं लेकिन यह सही नहीं लगता है। http://msdn.microsoft.com/en-us/library/ff660933%28v=PandP.20%29.aspx#_Generic_Typesयूनिटी 2.0 एक्सएमएल

कोड इस तरह दिखता है:: मैं एमएस प्रलेखन यहाँ की चर्चा करते हुए दिया है

public interface IRepository<T> where T : class 
{ 
    ... 
} 

public class GenericRepository<T> : IRepository<T> where T : class 
{ 
    ... 
} 

public class BlogRepository : GenericRepository<BlogRepository> 
{ 
    ... 
} 

एक्सएमएल config मैं इस समय है इस तरह loks:

<unity> 
    <!-- Aliases --> 
    <alias alias="BlogIRepository" 
      type="X.Services.Interfaces.IRepository[[X.Domain.Entities.Blog, X.Domain]], X.Services"/> 

    <alias alias="BlogRepository" 
      type="X.Repositories.BlogRepository, X.Repositories"/> 

    <!-- Type registration --> 
    <container name="development"> 
     <!-- Common connection string value --> 
     <instance name="Conn" type="System.String" value="blahblahblah"/> 
     <register type="BlogIRepository" mapTo="BlogRepository"> 
      <constructor> 
       <param name="connectionString" type="System.String" dependencyName="Conn"/> 
      </constructor> 
     </register> 
    </container> 
</unity> 

के अनुसार जेनेरिक प्रकारों को पंजीकृत करने के लिए जेनेरिक प्रकारों को पंजीकृत करने के लिए प्रलेखन, और यदि प्रकार एक सिस्टम प्रकार नहीं है तो आप अधिक स्क्वायर ब्रैकेट के अंदर पूरी तरह से योग्य प्रकार प्रदान करते हैं। मैंने जो किया है, मुझे लगता है। फिर भी - कोई काम नहीं।

संपादित: उदाहरण MSDN साइट से:

<register type="IDictionary[string, [MyApp.Interfaces.ILogger, MyApp]]"/> 

त्रुटि उत्पन्न है:

प्रकार का नाम या उपनाम IRepository हल नहीं किया जा सकता है। कृपया अपनी कॉन्फ़िगरेशन फ़ाइल जांचें और इस प्रकार का नाम सत्यापित करें।

उत्तर

19

MSDN गलत नहीं है हमने विशेष रूप से कुछ शॉर्टकट पार्सिंग नियम जोड़े ताकि आपको अधिकांश मामलों में सभी 'और स्क्वायर ब्रैकेट्स दर्ज न करें।

public interface IRepository<T> where T: class 
{ 

} 

public class GenericRepository<T> : IRepository<T> where T : class 
{ 

} 

public class BlogRepository : GenericRepository<Blog> 
{ 

} 

public class Blog 
{ 

} 

मेरे एक्सएमएल config इस तरह दिखता है:

मैं एक साथ एक उदाहरण है कि ज्यादातर तुम्हारा की तरह लग रहा थप्पड़ मारा

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 
    <namespace name="UnityConfigExample"/> 
    <assembly name="UnityConfigExample"/> 

    <container> 
     <register type="IRepository[]" mapTo="GenericRepository[]" /> 
     <register type="IRepository[Blog]" mapTo="BlogRepository" /> 
    </container> 
    </unity> 

और यह सिर्फ काम करता है।

क्या आप नामस्थान/असेंबली खोज के बजाय आईरिपोजिटरी के लिए उपनाम का उपयोग करने की कोशिश कर रहे किसी भी मौके से थे?

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 
    <alias alias="IRepository" type="UnityConfigExample.IRepository`1, UnityConfigExample" /> 
    <alias alias="GenericRepository" type="UnityConfigExample.GenericRepository`1, UnityConfigExample"/> 
    <alias alias="BlogRepository" type="UnityConfigExample.BlogRepository, UnityConfigExample"/> 
    <alias alias="Blog" type="UnityConfigExample.BlogRepository, UnityConfigExample"/> 

    <container> 
     <register type="IRepository[]" mapTo="GenericRepository[]" /> 
     <register type="IRepository[Blog]" mapTo="BlogRepository" /> 
    </container> 
    </unity> 

आप एक उपनाम के लिए प्रकार निर्दिष्ट करते हैं, तो आप CLR प्रकार सिंटैक्स का उपयोग अनिवार्य: मैं के रूप में अच्छी तरह से काम करने के लिए उपनाम का उपयोग कर निम्नलिखित मिला है। हर जगह आप सामान्य शॉर्टकट वाक्यविन्यास का उपयोग कर सकते हैं।

+2

आपकी आखिरी टिप्पणी इस मुद्दे के समाधान थी। मैं उपनामों में शॉर्टकट वाक्यविन्यास का उपयोग करने की कोशिश कर रहा था। धन्यवाद। – krisg

3

इससे पहले कि आप [[ (अपने कीबोर्ड पर Esc नीचे)

+1

एमएसडीएन साइट पर प्रलेखन निर्दिष्ट नहीं करता है कि यह आवश्यक है। मूल प्रश्न पर संपादन देखें। – krisg

+3

एमएसडीएन गलत है ... –

+0

धन्यवाद। एमएसडीएन गलत - जो इसे थक जाएगा। – krisg

1

मुझे लगता है कि आप `1 जोड़ने के लिए, उदाहरण के रूप में की जरूरत है here on MSDN सुझाव है कि एक` चरित्र छूट रहा है:

type="X.Services.Interfaces.IRepository`1[[X.Domain.Entities.Blog, X.Domain]], X.Services" 
+0

चीयर्स ने चाल की है! – krisg

संबंधित मुद्दे