मैं डैनियल को एक व्यावहारिक उदाहरण में जोड़ना चाहता हूं। (उसका जवाब बहुत विस्तृत और सही है, इसे पहले देखें)।
टी एल; डॉ:
services.Add
सीधे मिडलवेयर से संबंधित नहीं है। यह निर्भरता इंजेक्शन कंटेनर में निर्भरताओं को पंजीकृत करने के बारे में है।
app.Use
चेरी चुनने के बारे में है कि कौन सा कोड पाइपलाइन (लॉजिक) में चलाएगा, जिसमें ऑर्डर होता है, और यदि पाइपलाइन को प्रसंस्करण जारी रखने की अनुमति मिलती है या नहीं। कल्पना यहाँ सीमा है, एक उदाहरण एक मिडलवेयर कि आईपी पता के आधार पर, आप एक पृष्ठ दिखा सकते हैं कि कहते हैं writting किया जाएगा:) 'खेद सेवा आपके देश में उपलब्ध नहीं है'
app.UseMiddleware
यह app.Use
की तरह ही है लेकिन कोड इनलाइन घोषित करने के बजाय, आप एक कक्षा निर्दिष्ट करते हैं जिसमें एक Invoke विधि होगी जिसे आपके लिए बुलाया जाएगा।
अब, चलो कुछ नमूना कोड के लिए मिलता है:
मान लीजिए कि आप अपने HTML minifing की तरह अपने उत्पादन या अपने उत्पादन में से कुछ, कार्रवाई करने के लिए अपने आवेदन चाहते हैं।
आप एक मिडलवेयर कि प्रतिक्रिया से पहले उत्पादन के लिए लिखा है को बीच में रोक जोड़ने और इसे कम करें कर सकते हैं।
तो आप का उपयोग कर सकते हैं:
app.Use(async (context, next) =>
{
await next(context);
context.Response // will have the response as processed by all the previous middleswares like mvc.
if IsMinifiable(context.Response)
MinifyResponse(context.Response);
});
आप विभिन्न अनुप्रयोगों में या दूसरों के द्वारा अपने मिडलवेयर साझा करना चाहते हैं, तो आप एक मध्यस्थ बना सकते हैं और उपयोग कर सकते हैं इसे और अधिक की तरह:
app.UseMiddleware<HtmlMinifierMiddleware>();
यह कॉन्फ़िगरेशन विधि में कोड की एक पंक्ति के साथ आपके लिए सभी काम करेगा। यह app.UseHtmlMinifier()
की तरह विस्तार तरीकों जहाज और विशिष्ट वस्तुओं है कि विन्यास या समर्थन कॉन्फ़िगरेशन पैरामीटर के लिए श्रृंखलित जा सकती है, वापस जाने के लिए आम बात है। एक्सटेंशन देता है का उपयोग करते हुए लचीलापन, पठनीयता और एपीआई खोज क्षमता का एक बहुत: डी
अब मान लें कि आपकी मिडलवेयर कुछ इस तरह delcared है:
public class HtmlMinifierMiddleware {
public HtmlMinifier(IHtmlMinifier minifier) {
// ...
}
public string Minify(string content) {
return minifier.Minify(content);
}
// ...
}
के रूप में आप देख सकते हैं, तो आप एक IHtmlMinifer उत्तीर्ण करने की आवश्यकता है, तो आप की जरूरत है DI के लिए इसे पंजीकृत करने के लिए।
services.AddScoped<IHtmlMinifier, MyCoolHtmlMinifier>();
अब कल्पना करें कि आप 1 की जरूरत नहीं है, लेकिन कई निर्भरता, यह मिडलवेयर के विकासकर्ता/उपभोक्ता हर एक निर्भरता है कि होने की जरूरत है पता करने के लिए अप करने के लिए किया जाएगा:
इस तरह ConfigureService पर पूरा किया है दर्ज कराई।
मिडलवेयर के लेखक आमतौर पर डेवलपर्स के उपयोग को कम करने के लिए एक विस्तार करते हैं जैसे: services.AddHtmlMinifier()
जो कि डी कंटेनर में पंजीकरण सेवाओं के लिए एक विस्तार विधि है।
भले ही आप मिडलवेयर का उपयोग नहीं कर रहे हैं, आप उसी पैटर्न का उपयोग करके अपने स्वयं के आवेदन की निर्भरता का लाभ उठा सकते हैं।
उदाहरण के लिए, यदि आपके ऐप एक ई-कॉमर्स है, तो आप विस्तार तरीकों कि अपनी निर्भरता रजिस्टर बना सकते हैं: services.AddProductManagement()
, services.AddPriceCalculator()
, services.AddSearching()
, आदि, या बस services.AddMyCoolApplication()
जोड़ने के लिए एक साफ रास्ता प्रदान करने के लिए (पंजीकरण के) अपनी सेवाओं (निर्भरता) आपके आवेदन के लिए डी कंटेनर द्वारा पाया जा सकता है।
लिंक बहुत मददगार था, धन्यवाद – wodzu