डेटाबेस एक्सेस के लिए अपने जेनेरिक रिपॉजिटरी को हल करने का प्रयास करते समय मुझे एक समस्या का सामना करना पड़ा। जब मैं इन दोनों को भंडार कार्यान्वयन/इंटरफ़ेस के रूप में उपयोग करता हूं तो मैं हल करने में सक्षम नहीं हूं उदा। एक IRepository<ICustomer>
:
इंटरफेस:
public interface IRepository<T> where T : IDbModel
{ ... }
कार्यान्वयन:
public class Repository<T> : IRepository<T> where T : DbModel
{ ... }
लेकिन जब मैं IDbModel
और DbModel
को class
से बदल देता हूं तो दोनों ही मामलों में यह अपेक्षा के अनुरूप काम करता है।
मेरा पंजीकरण इस तरह दिखता है:
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterType<DbModel>().As<IDbModel>();
builder.RegisterType<Customer>().As<ICustomer>();
पूर्णता के लिए, ये हैं ICustomer
:
public interface ICustomer : IDbModel
{ ... }
Customer
:
public class Customer : DbModel, ICustomer
{ ... }
IDbModel
:
public interface IDbModel
{ ... }
और DbModel
(मैंने जांचा कि जब मैं abstract
को हटाता हूं तो यह काम करता है, लेकिन ऐसा नहीं होता है):
public abstract class DbModel : IDbModel
{ ... }
मैं सोच रहा था कि क्या मेरा पहला प्रयास किसी तरह से काम करना संभव है?
1 उत्तर
IRepository<ICustomer>
को हल करने के लिए ऑटोफैक से पूछकर यह Repository<ICustomer>
को हल करने का प्रयास करेगा और ICustomer
DbModel
नहीं है
त्रुटि को ठीक करने के लिए आपको IRepository<TModel>
पर वर्ग प्रकार की बाधा को एक इंटरफ़ेस प्रकार की बाधा से बदलना चाहिए।
public class Repository<T> : IRepository<T>
where T : IDbModel
{ }
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
c#
C # (उच्चारण "तेज देखें") Microsoft द्वारा विकसित एक उच्च स्तरीय, सांख्यिकीय रूप से टाइप किया हुआ, बहु-प्रतिमान प्रोग्रामिंग भाषा है। C # कोड आमतौर पर Microsoft के .NET परिवार के टूल और रन-टाइम को लक्षित करता है, जिसमें .NET फ्रेमवर्क, .NET कोर और Xamarin अन्य शामिल हैं। C # या C # के औपचारिक विनिर्देश में लिखे गए कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें।