साथ सामान्य भंडार करने के लिए मैं इस प्रकार मेरी सामान्य भंडार की स्थापना की है:कैसे निर्भरता इंजेक्शन
public interface IRepository<T> : IDisposable where T : Entity
{
T GetById(int id);
}
public abstract class Repository<T> : IRepository<T> where T : Entity
{
protected readonly SqlDbContext _context = new SqlDbContext();
public T GetById(int id)
{
return _context.Set<T>().Find(id);
}
}
मेरी MVC अनुप्रयोग में निर्भरता इंजेक्शन सक्षम करने के लिए मैं भी एक उत्पाद इंटरफ़ेस बनाने के बाद से हस्ताक्षर अलग है। यह अन्य भंडारों के लिए भी मामला है।
public interface IProductRepository : IRepository<Product>
{
IEnumerable<Product> GetDiscountedProducts();
}
और कार्यान्वयन (विरासत ध्यान दें)
public class ProductRepository : Repository<Product>, IProductRepository
{
public IEnumerable<Product> GetDiscountedProducts()
{
return _context.Set<Product>().Where(x=>x)...
}
}
अंत भंडार एकता
public HomeController(IProductRepository repository)
{
}
का उपयोग कर MVC नियंत्रक में इंजेक्शन हो जाता है यह सिर्फ मुझे है या इस विरासत श्रृंखला एक है थोड़ा गन्दा यहाँ? क्या इस डिजाइन को बेहतर बनाने का कोई तरीका है?
इम सोच क्या 'भंडार' और 'IRepository द्वारा प्राप्त की है' पैटर्न जब यह 'IProductRepository' के रूप में पारित रहा है - आप 'रिपोजिटरी ' कार्यान्वयन कभी नहीं देख पाएंगे जब तक कि आप कास्ट न करें, इसलिए यह थोड़े बेकार है। –
Tejs
इस पर एक नज़र डालें: http://codebetter.com/gregyoung/2009/01/16/ddd-the-generic-repository/ – Dmitry
यह प्रयास करने का प्रयास क्या है? (गंभीर प्रश्न) मेरे एमवीसी 3 प्रोजेक्ट के साथ मेरे पास क्या है, ऑब्जेक्ट्स (क्वेरीज़ एंड कमांड्स अला सीक्यूआरएस) के 2 सेट हैं, और उनमें से प्रत्येक एक LINQ के साथ आता है जो एक एकल रिपोजिटरी क्लास को हिट करता है जिसमें सभी डेटाबेस ऑब्जेक्ट्स तक पहुंच होती है। इस मामले में एकाधिक रिपॉजिटरीज़ मुझे कहाँ लाभ पहुंचाएंगे?(मुझे पहले से ही पता है कि प्रत्येक कमान/क्वेरी अपने वर्ग के नाम से सम्मेलन द्वारा क्या करती है) और यह भी निर्भरता इंजेक्शन कहां खेलता है? फिलहाल यह मेरे लिए अतिसंवेदनशील प्रतीत होता है, लेकिन मुझे जानने में दिलचस्पी है। –