2017-03-01 7 views
7

के बिना ओविन में मिडलवेयर जोड़ने के लिए कैसे मैं वर्तमान में एक पुस्तकालय का निर्माण कर रहा हूं जिसमें कई ओविन-मिडलवायर शामिल हैं। इन मध्यवर्ती को एक निश्चित क्रम में निष्पादित किया जाना चाहिए। ओविन के पहले रिलीज में से एक में, IAppBuilder इंटरफ़ेस था। हालांकि IAppBuilder अब ओविन का हिस्सा नहीं है, लेकिन माइक्रोसॉफ्ट.ऑविन का हिस्सा है। मैं माइक्रोसॉफ्ट.ऑविन पर निर्भरता रखने के लिए अपने उपयोगकर्ता को मजबूर नहीं करना चाहता हूं।IAppBuilder

माइक्रोसॉफ्ट.ऑविन का उपयोग किये बिना ओडिन-पाइपलाइन में मिडलवेयर जोड़ने का पसंदीदा तरीका क्या है?

+1

शायद यह आप में मदद करता है: https://visualstudiomagazine.com/articles/2015/05/01/inject-custom-middleware.aspx – Rumpelstinsk

+0

धन्यवाद, लेकिन दुर्भाग्य से यह नहीं करता है टी। यह उदाहरण IAplicationBuilder इंटरफ़ेस का उपयोग कर रहा है जो ओविन का हिस्सा भी नहीं है। – Jeroen

उत्तर

0

इसमें कुछ समय लगा, लेकिन मुझे लगता है कि मैंने इसे समझ लिया।

पहले निर्धारण के रूप में 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() 
संबंधित मुद्दे