डेटाबेस एक्सेस के लिए अपने जेनेरिक रिपॉजिटरी को हल करने का प्रयास करते समय मुझे एक समस्या का सामना करना पड़ा। जब मैं इन दोनों को भंडार कार्यान्वयन/इंटरफ़ेस के रूप में उपयोग करता हूं तो मैं हल करने में सक्षम नहीं हूं उदा। एक 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
{ ... }

मैं सोच रहा था कि क्या मेरा पहला प्रयास किसी तरह से काम करना संभव है?

0
Rafiwui 2 जुलाई 2019, 12:33

1 उत्तर

सबसे बढ़िया उत्तर

IRepository<ICustomer> को हल करने के लिए ऑटोफैक से पूछकर यह Repository<ICustomer> को हल करने का प्रयास करेगा और ICustomer DbModel नहीं है

त्रुटि को ठीक करने के लिए आपको IRepository<TModel> पर वर्ग प्रकार की बाधा को एक इंटरफ़ेस प्रकार की बाधा से बदलना चाहिए।

 public class Repository<T> : IRepository<T> 
    where T : IDbModel 
 { }
1
Cyril Durand 2 जुलाई 2019, 13:22