9

साथ सज्जाकार लागू करने के लिए एक ASP.NET MVC 5 आवेदन मैं निम्नलिखित StructureMap विन्यास है पर:कैसे ASP.NET कोर निर्भरता इंजेक्शन

cfg.For(typeof(IRequestHandler<,>)).DecorateAllWith(typeof(MediatorPipeline<,>)); 

किसी को भी कैसे ASP.NET कोर आईओसी के साथ इस विन्यास करने के लिए पता है ?

उत्तर

9

बॉक्स आईओसी कंटेनर बॉक्स से बाहर सजावट पैटर्न या ऑटो डिस्कवरी का समर्थन नहीं करता है, जो कि "डिजाइन द्वारा" जहां तक ​​मुझे पता है।

विचार मूल आईओसी संरचना प्रदान करना है जो बॉक्स से बाहर काम करता है या जहां अन्य आईओसी कंटेनर को डिफ़ॉल्ट कार्यक्षमता बढ़ाने के लिए प्लग किया जा सकता है।

इसलिए यदि आपको किसी भी उन्नत सुविधाओं की आवश्यकता है (किसी विशिष्ट कंस्ट्रक्टर के लिए समर्थन, इंटरफ़ेस को लागू करने वाले सभी प्रकारों का स्वत: पंजीकरण या सजावटी और इंटरसेप्टर इंजेक्ट करना) तो आपको इसे स्वयं लिखना होगा या आईओसी कंटेनर का उपयोग करना होगा जो इस कार्यक्षमता को प्रदान करता है ।

1

यह workaround सजावट को किसी प्रकार के सभी उदाहरणों पर लागू नहीं करता है लेकिन सजावटी तर्क को अन्य फ़ाइल में सारणी के लिए विस्तार विधियों का उपयोग करता है।

तरह डेकोरेटर संरचना को परिभाषित करना:

public static class QueryHandlerRegistration 
{ 
    public static IServiceCollection RegisterQueryHandler<TQueryHandler, TQuery, TResult>(
     this IServiceCollection services) 
     where TQuery : IQuery<TResult> 
     where TQueryHandler : class, IQueryHandler<TQuery, TResult> 
    { 
     services.AddTransient<TQueryHandler>(); 
     services.AddTransient<IQueryHandler<TQuery, TResult>>(x => 
      new LoggingDecorator<TQuery, TResult>(x.GetService<ILogger<TQuery>>(), x.GetService<TQueryHandler>())); 
     return services; 
    } 
} 

और इसे पसंद बुला:

services.AddMvc(); 
// Add application services. 
services.AddTransient<IEmailSender, AuthMessageSender>(); 
services.AddTransient<ISmsSender, AuthMessageSender>(); 

services.RegisterQueryHandler<FindThingByIdQueryHandler, FindThingByIdQuery, Thing>(); 

भी Scrutor पैकेज नहीं है पर काम किया जा रहा है।

+2

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/16875007) – rafalmp

संबंधित मुद्दे