c# unity generics interface and abstract class -


मेरे पास एक इंटरफ़ेस है:

  सार्वजनिक इंटरफ़ेस IMigrationSchema & lt; टी & gt; {टी मानचित्रइवेंट (IOtherEvent sourceEvent); }  

एक अमूर्त वर्ग द्वारा कार्यान्वित किया गया:

  सार्वजनिक सार वर्ग MigrationSchema & lt; T & gt; : IMigrationSchema & lt; T & gt; {सार्वजनिक सार टी मानचित्रइवेंट (IOtherEvent sourceEvent); }  

और फिर मेरे माइग्रेशनसैमा के वास्तविक कार्यान्वयन:

  पब्लिक क्लास माइग्रेशन सचेमा इंपलिप: माइग्रेशन सचेमा & lt; इवेंटआफ्रेटर माइग्रेशन & gt; {सार्वजनिक माइग्रेशनस्कीमाइंपल (): बेस () {} सार्वजनिक ओवरराइड इवेंटअफाईरमैटोग्राफिकमैप (IOtherEvent virtualSourceEvent) {नई इवेंटअफाईर माइग्रेशन (वास्तविक एसोसिएशन) पर लौटें; }}  

यह जानकर कि:

  सार्वजनिक वर्ग EventAfterMigration: BaseEvent  

मैं आदर्श रूप से क्या करना चाहूंगा :

  var माइग्रेशनसैमी = कंटेनर। रिज़ोलिव & lt; IMigrationSchema & lt; BaseEvent & gt; & gt; ();  

और मेरी कॉन्फ़िग फाइल में है:

  & lt; रजिस्टर प्रकार = "IMigrationSchema11 [[MyApp.BaseEvent, MyApp]]" mapTo = " MigrationSchemaImpl "& gt;  

मुझे पता है कि यह सार दिखता है, मैंने कई संभावनाओं का परीक्षण किया है लेकिन हर बार मुझे InvalidCastException मिलता है, कह रही है कि

माइग्रेशन स्कीमा आईमप्ल को आईमैंटेशन में नहीं रखा जा सकता है स्कीमा 1 [बेसएवेंट]

मुझे लगता है कि यह पूरी तरह से संभव है, लेकिन मुझे कुछ आसान याद आ रहा है। किसी भी मदद की सराहना!

प्रकार के बीच रिश्ते जादुई रूप से इस प्रकार के उपयोग के सामान्य इंटरफेस / प्रकार के बीच संबंध नहीं बनते हैं माइग्रेशनसैमीआईमप्ल लागू करता है IMigrationSchema & lt; EventAfterMigration & gt; , नहीं IMigrationSchema & lt; BaseEvent & gt; - ताकि आप एक दूसरे को (या बिना एकता के साथ) ।

आपको सरल कोड के साथ एक ही त्रुटि मिलती है:

  var base = (IMigrationSchema & lt; BaseEvent & gt;) (नया माइग्रेशनसैमाइंपल ());  

आप IMigrationSchema & lt; में BaseEvent & gt; जैसा उपयोग करने का प्रयास कर सकते हैं (सुनिश्चित नहीं है कि यह आपके मामले में मदद करेगा)।

< / html>

Comments