2011-03-02 14 views
12

मैं उस गति को बेहतर बनाने की कोशिश कर रहा हूं जिस पर मेरा एमवीसी 2 ऐप शुरू हो रहा है।एएसपी.नेट एमवीसी स्टार्टअप प्रदर्शन में सुधार

मैं प्रदर्शन नमूने के पहले दौर किया था, और ऐसा लगता है कि

MvcAreaRegistration.RegisterAllAreas 

स्टार्टअप समय के सबसे ऊपर ले जा रहा है।

मैंने here पढ़ा है कि आप मैन्युअल रूप से क्षेत्र को भी पंजीकृत कर सकते हैं, और मैं इसे आज़माकर देखना चाहता हूं, लेकिन मुझे यकीन नहीं है कि सिंटैक्स उस पृष्ठ पर कैसे काम करता है।

तो मेरा (पहला) प्रश्न चौड़ा हो: मैं अपने क्षेत्र को मैन्युअल रूप से कैसे पंजीकृत कर सकता हूं?

उत्तर

3

this super handy area registration utility आज़माएं। न केवल पंजीकरण को आसान बनाता है, बल्कि यह भी तेज़ तरीका है क्योंकि यह क्षेत्रों के लिए प्रत्येक लोड असेंबली को स्कैन नहीं करता है।

5

सबसे पहले अपने आप को इस तरह Global.asax में एक सहायक विधि तैयार:

private static void RegisterArea<T>(RouteCollection routes, object state) where T : AreaRegistration 
{ 
    AreaRegistration registration = (AreaRegistration)Activator.CreateInstance(typeof(T)); 
    AreaRegistrationContext registrationContext = new AreaRegistrationContext(registration.AreaName, routes, state); 
    string areaNamespace = registration.GetType().Namespace; 
    if (!String.IsNullOrEmpty(areaNamespace)) 
    registrationContext.Namespaces.Add(areaNamespace + ".*"); 
    registration.RegisterArea(registrationContext); 
} 

अब आप इस तरह Application_Start में मैनुअल पंजीकरण के लिए इस सहायक विधि का उपयोग कर सकते हैं:

//Replace AreaRegistration.RegisterAllAreas(); with lines like those 
RegisterArea<FirstAreaRegistration>(RouteTable.Routes, null); 
RegisterArea<SecondAreaRegistration>(RouteTable.Routes, null); 

AreaRegistration वर्ग हैं जब आप नया क्षेत्र जोड़ते हैं तो विजुअल स्टूडियो द्वारा बनाया गया, आप उन्हें क्षेत्र/क्षेत्रनाम निर्देशिका में पा सकते हैं।

0

आप इसे पूरी तरह से हाथ से कर सकते हैं और RegisterArea कार्यान्वयन का उपयोग करने से बच सकते हैं।

चेक इस अनुच्छेद: http://www.philliphaydon.com/2011/07/mvc-areas-routes-order-of-routes-matter/

संक्षेप में - आप अपने मार्ग के लिए "क्षेत्र" DataToken जोड़ने की जरूरत:

private void RegisterAreas(RouteCollection routes) 
{ 
    // AreaRegistration.RegisterAllAreas(); 
    var route = routes.MapRoute(
     "MyArea_Default", 
     "MyArea/{controller}/{action}/{id}", 
     new { controller = "App", action = "Index", id = UrlParameter.Optional }, 
     new string[] { "MyProject.Areas.*" } 
    ).DataTokens.Add("Area", "CDR"); 
} 
संबंधित मुद्दे