मेरी समाधान में परियोजनाओं को इस तरह से सेट हैं। डेटा, मैं अपने डेटा को रेपॉजिटरीज़ के समूह के साथ अमूर्त बातचीत के लिए एक्सेस करने के लिए एंटिटी फ्रेमवर्क का उपयोग कर रहा हूं। स्पष्ट कारणों से, मैं अपनी ऐप को चाहता हूं। केवल ऐप। डेटा परियोजना को संदर्भित करने के लिए और इकाई फ्रेमवर्क नहीं।इंजेक्शन DbContext
मैं निर्माता इंजेक्शन का उपयोग कर रहा मेरी नियंत्रकों एक भंडार कंटेनर कि इस तरह दिखता है के लिए एक संदर्भ देने के लिए:
public interface IDataRepository
{
IUserRepository User { get; set; }
IProductRepository Product { get; set; }
// ...
}
public class DataRepository : IDataRepository
{
private readonly AppContext _context;
public DataRepository(AppContext context)
{
_context = context;
}
// ...
}
DataRepository
एक AppContext
वस्तु (जो इकाई की रूपरेखा के DbContext
से विरासत) होगा कि सभी बच्चे डेटाबेस का उपयोग करने के लिए रिपोजिटरीज का उपयोग किया जाएगा।
तो अंत में हम अपनी समस्या पर आते हैं: मैं DataRepository
पर कन्स्ट्रक्टर इंजेक्शन का उपयोग कैसे कर सकता हूं क्योंकि यह एक कोड लाइब्रेरी है और इसमें कोई प्रविष्टि-बिंदु नहीं है? मैं App.Web में AppContext
बूटस्ट्रैप नहीं कर सकता क्योंकि तब मुझे उस प्रोजेक्ट से एंटीटी फ्रेमवर्क का संदर्भ देना होगा।
या क्या मैं बस कुछ बेवकूफ कर रहा हूं?
नहीं अपने प्रश्न, लेकिन इसके बजाय भंडार इंटरफेस का एक बहुत को परिभाषित करने के लिए एक उत्तर, एक भी 'IRepository' इंटरफेस को परिभाषित करने, के रूप में समझाया [यहां] की कोशिश (http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=92)। यह अधिक लचीलापन की अनुमति देता है। –
Steven
@Steven आपकी टिप्पणी के लिए धन्यवाद। मैं इस कारण से विशिष्ट भंडारों को प्राथमिकता देता हूं: "एक भंडार डोमेन का एक हिस्सा है, और यह डोमेन सामान्य नहीं है। प्रत्येक इकाई को हटाया नहीं जा सकता है, न कि प्रत्येक इकाई को जोड़ा जा सकता है, न कि प्रत्येक इकाई में एक भंडार होता है"। http://stackoverflow.com/questions/1230571/advantage-of-creating-a-generic-repository-vs- विशिष्ट- रेस्पिटरी-for-each-obje – ajbeaven