इसमें कुछ समय लगा, लेकिन मुझे लगता है कि मैंने इसे समझ लिया।
पहले निर्धारण के रूप में Owin द्वारा निर्दिष्ट:
public delegate Task AppFunc(IDictionary<string, object> environment);
public delegate AppFunc MidFunc(AppFunc next);
public delegate MidFunc MidFactory(IDictionary<string, object> startupProperties);
public delegate void BuildFunc(MidFactory midFactory);
मैं delegate
यहाँ का उपयोग जेनरिक पागलपन से बचने के लिए।
IAppBuilder
से BuildFunc
पर जाने के लिए:
public static BuildFunc UseOwin(this IAppBuilder builder)
{
return middleware => builder.Use(middleware(builder.Properties));
}
एक पाइप लाइन BuildFunc
का उपयोग कर निर्माण करने के लिए आदेश, आप BuildFunc
पर एक्सटेंशन बना सकते हैं:
public static BuildFunc UseMyFramework(this BuildFunc buildFunc)
{
buildFunc(startupProperties => BuildPipeline(startupProperties));
return buildFunc;
}
यह वापस जाने के लिए एक अच्छा अभ्यास है चेनिंग के लिए BuildFunc
।
public static MidFunc BuildPipeline(IDictionary<string, object> startupProperties)
{
return next => LogMiddleware(AuthenticateMiddleware(MyApplication));
// Or this if you don't supply your own AppFunc
return next => LogMiddleware(AuthenticateMiddleware(next));
}
public static AppFunc LogMiddleware(AppFunc next)
{
AppFunc middleware = async environment =>
{
// Log request
await next(environment);
};
return middleware;
}
public static AppFunc AuthenticateMiddleware(AppFunc next)
{
AppFunc middleware = async environment =>
{
// authenticate request
await next(environment);
};
return middleware;
}
public static async Task MyApplication(IDictionary<string, object> environment)
{
await Task.CompletedTask;
}
आप अभी भी अपने ढांचे के लिए Owin कार्यान्वयन कनेक्ट करने की आवश्यकता:
पाइपलाइन का निर्माण MidFunc
रों एक साथ और वैकल्पिक रूप से जोड़ने के वास्तविक AppFunc
के साथ समाप्त से ज्यादा कुछ नहीं है। मैं इसके लिए Microsoft.Owin का उपयोग करें:
app.UseOwin().UseMyFramework()
शायद यह आप में मदद करता है: https://visualstudiomagazine.com/articles/2015/05/01/inject-custom-middleware.aspx – Rumpelstinsk
धन्यवाद, लेकिन दुर्भाग्य से यह नहीं करता है टी। यह उदाहरण IAplicationBuilder इंटरफ़ेस का उपयोग कर रहा है जो ओविन का हिस्सा भी नहीं है। – Jeroen