केवल पढ़ने-योग्य एपीआई सेवा पर काम करना और संचालन आधारित प्रक्रिया में संचालन को पैकेज करने के लिए जेनेरिक का उपयोग करना।एक सामान्य निर्भरता इंजेक्शन
भंडार इंटरफ़ेस:
public interface IRepository<TIdType,TEntityType> where TEntityType:class {
Task<EntityMetadata<TIdType>> GetMetaAsync();
}
भंडार कार्यान्वयन:
public class Repository<TIdType,TEntityType> : IRepository<TIdType,TEntityType> where TEntityType:class {
public Repository(string connectionString) { // initialization }
public async Tas<EntityMetadata<TIdType>> GetMetaAsync() { // implementation }
}
Startup.cs -> ConfigureServices
में:
services.AddSingleton<IRepository<int, Employee>> (p=> new Repository<int, Employee>(connectionString));
services.AddSingleton<IRepository<int, Department>> (p=> new Repository<int, Department>(connectionString));
// and so on
नियंत्रक:
public class EmployeeController : Controller {
public EmployeeController(IRepository<int,Employee> repo) {//stuff}
}
मैं वर्तमान में ConfigureServices
में इकाई प्रकार के सभी प्रकार के लिए भंडार implmentation दोहरा रहा हूँ। क्या यह सामान्य भी बनाने का कोई तरीका है?
services.AddSingleton<IRepository<TIdType, TEntityType>> (p=> new Repository<TIdType, TEntityType>(connectionString));
इसलिए नियंत्रक कन्स्ट्रक्टर कॉल में स्वचालित रूप से प्रासंगिक भंडार प्राप्त हो सकता है?
अद्यतन 1: कोई duplicate:
- भंडार कार्यान्वयन डिफ़ॉल्ट निर्माता
- नहीं है क्योंकि यह डिफ़ॉल्ट निर्माता नहीं है, मैं समाधान से जुड़ा हुआ प्रश्न में दिए गए प्रदान नहीं कर सकते।
- जब
services.AddScoped(typeof(IRepository<>), ...)
कोशिश कर मैं त्रुटिUsing the generic type 'IRepostiory<TIdType,TEntityType>' requires 2 type arguments
संभावित डुप्लिकेट [एएसपी.नेट कोर में जेनेरिक रिपोजिटरी के अलग डुप्लिकेट के बिना संभावित डुप्लिकेट Startup.cs में तालिका के अनुसार लाइन सामना?] (Http://stackoverflow.com/questions/33566075/generic-repository-in-asp-net-core-without-having-a-separate-addscoped-line-per) – zaitsman
http://stackoverflow.com/questions/33566075/generic-repository-in-asp-net-core-without-having-a-separate-addscoped-line-per – zaitsman
तकनीकी रूप से यह डुप्लिकेट है। लेकिन आप 2 पैरामीटर जब आप का उपयोग करने के 'typeof (IRepository <,>)' 'typeof (IRepository <>)' क्योंकि यह दो सामान्य मापदंडों – Tseng