2012-11-27 10 views
9

पर अतिरिक्त नियंत्रकों को कैसे लोड करें मैं बाद में अतिरिक्त वेबएपी कंट्रोलर को गतिशील रूप से लोड करना चाहता हूं (वेबएपी प्रारंभिकता के बाद), जो अलग-अलग असेंबली में हैं। इसके अलावा मैं रनटाइम पर उन नियंत्रकों के लिए मार्ग जोड़ना चाहता हूं।एएसपी.Net WebApi: मेरे Asp.Net MVC 4 WebApi एप्लिकेशन में रनटाइम

मुझे आश्चर्य है, अगर ऐसा करना संभव है।

मेरा लक्ष्य एक वेब-ऐप बनाना है, जहां मैं नियंत्रक अपलोड कर सकता हूं (संकलित असेंबली) और नियंत्रक स्वचालित रूप से इस एप्लिकेशन के भीतर होस्ट हो जाएंगे।

मैंने पहले से ही अपनी खुद की असेंबली रीसोलवर कक्षा को लागू करके इसे प्राप्त करने की कोशिश की है, लेकिन (जहां तक ​​मैंने देखा है), विधानसभा रिजोलवर प्रारंभिक चरण में एक बार लोड हो जाता है।

हो सकता है कि सभी नियंत्रकों को "पुनः लोड" करने का विकल्प हो।

किसी भी मदद की सराहना की जाएगी!

मेरियस

+0

http://www.dotnetcurry.com/ShowArticle.aspx?ID=898 आप इस देखा है। –

+0

मेरा एक पूर्व सहयोगी हमारे सिस्टम में काम करने के लिए लगभग समान कुछ मिला। मुझे पता है कि वह गतिशील असेंबली लोडिंग का प्रबंधन करने के लिए [एमईएफ] (http://msdn.microsoft.com/en-us/library/dd460648.aspx) का उपयोग कर समाप्त हो गया है, लेकिन मुझे विशिष्टताओं को याद नहीं है। मैंने उसे इस पोस्ट का एक लिंक भेजा, शायद वह आपको वापस ले जाएगा। इस बीच, आप MEF के साथ स्वयं समाधान के साथ आने का प्रयास कर सकते हैं। – gzak

उत्तर

2

आप वेब एपीआई निर्भरता रिज़ॉल्वर इस्तेमाल कर सकते हैं: अपने जवाब के लिए

public class WebApiApplication : System.Web.HttpApplication 
{ 
    void ConfigureApi(HttpConfiguration config) 
    { 
     config.DependencyResolver = new MyDependencyResolver(); 
    } 

    protected void Application_Start() 
    { 
     ConfigureApi(GlobalConfiguration.Configuration); 

     // ... 
    } 
} 

Using the Web API Dependency Resolver

2

धन्यवाद।

मैंने इसे समझ लिया, ऐसा करना संभव नहीं है, क्योंकि सभी नियंत्रक एक बार लोड होते हैं और पूरे समय कैश किए जाते हैं।

DefaultHttpControllerSelector विधि में HttpControllerTypeCache देखें प्रारंभ करें नियंत्रकInfoCache (...)।

एक प्रकार-कैश रीफ्रेश करने के लिए, मुझे एक कस्टम HttpControllerSelector को लागू करना होगा।

0

के बारे में अगर Global.asax में आप एक विशिष्ट फ़ोल्डर में सभी विधानसभाओं लोड और फिर, एक वर्ग है जो किसी विशिष्ट इंटरफ़ेस लागू करता है के लिए देखा उदाहरण के लिए

शून्य RegisterControllers (RouteCollection मार्गों) क्या;

एक उदाहरण बनाएं और फिर अपने मार्ग संग्रह में पास करें। इसके बाद वेबसाइट स्टार्टअप के दौरान अतिरिक्त मार्ग पंजीकृत होंगे।

+0

हाय पीटर, मैं बाद में अतिरिक्त वेबएपी नियंत्रकों को गतिशील रूप से लोड करना चाहता हूं (जब वेबसाइट पहले से चल रही है)। मुझे पता है कि global.asax में नियंत्रकों को कैसे लोड किया जाए, लेकिन यह केवल एक बार होता है - स्टार्ट-अप पर। – Marius

+0

क्या आईआईएस वेब ऐप को फिर से शुरू नहीं करता है जब भी आप बाइनरी फ़ोल्डर की सामग्री को बदलते हैं? –

2

एमईएफ जाने का रास्ता है। डिफ़ॉल्ट नियंत्रक फैक्ट्री को प्रतिस्थापित करने के लिए आपको अपना स्वयं का नियंत्रक फ़ैक्टरी बनाना होगा। http://www.fidelitydesign.net/?p=104

संपादित करें इस लिंक पर एक नज़र डालें: मृत लिंक, वेबैक देख https://web.archive.org/web/20130619191423/http://www.fidelitydesign.net/?p=104