2011-06-02 14 views
7

मेरे पास एक कस्टम रेजर व्यू बेस क्लास है जिसमें स्थानीयकरण निर्भर सेवा के लिए एक संपत्ति है जिसे संपत्ति इंजेक्शन के माध्यम से एकता के साथ इंजेक्शन दिया जाता है।कस्टम रेजर बेस बेस और निर्भरता इंजेक्शन देखें

यदि मैं किसी दृश्य में संपत्ति का उपयोग करता हूं तो संपत्ति ठीक से हल हो जाती है। लेकिन अगर मैं एक ही लेआउट (मास्टर पेज) में एक ही संपत्ति का उपयोग करने की कोशिश करता हूं तो संपत्ति अभी तक सेट नहीं की जा रही है।

क्या कोई यह बता सकता है कि दृश्यता को कैसे हल किया जाए और संकलित किया जाए, इससे पहले कि एकता दृश्य को हल करने और निर्भरताओं को इंजेक्ट करने का प्रयास करे।

मैं एक सम्मेलन [ViewName.Title] का उपयोग करके प्रत्येक दृश्य का शीर्षक सेट करने की कोशिश कर रहा हूं और स्थानीयकरण सेवा लुकअप है, जो दृश्य पर बहुत अच्छा काम करता है, लेकिन मैं इसे प्रत्येक दृश्य में दोहराना नहीं चाहता । मुझे तर्क को _ViewStart.cshtml पर ले जाने की भावना है लेकिन व्यूबैग या मेरी स्थानीयकरण सेवा वहां उपलब्ध नहीं है।

बेस वर्ग:

public abstract class LocalizeBaseWebViewPage<TModel> : WebViewPage<TModel> 
{ 
    [Microsoft.Practices.Unity.Dependency] 
    public ILocalizationService LocalizationService { get; set; } 

    public virtual string Localize(string key) 
    { 
     return LocalizationService.GetResource(key); 
    } 
} 

इस सेवा के लिए सेट नहीं ऑब्जेक्ट संदर्भ की वजह से Index.cshtml

में काम करता है
@{ 
    ViewBag.Title = Localize("Title"); 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

लेकिन नहीं _Layout.cshtml में,।

@{ 
    ViewBag.Title = Localize("Title"); 
} 
+0

हमें दिखाएँ कैसे और की तरह उस्तरा आधार वर्ग नज़र भी मास्टर पृष्ठ में उपयोग में अपनी संपत्ति है। – Eduard

+0

क्या आप इसे अपने कंट्रोलर में कर सकते हैं और दृश्य मॉडल डीटीओ (या व्यूबैग प्रॉपर्टी) है जिसे आप पहले से ही स्थानीयकृत दृश्य में भेजते हैं? – Charlino

+0

@ चार्लीनो मुझे यकीन नहीं है कि मैं समझता हूं, लेकिन समस्या यह प्रतीत होती है कि कंटेनर से पूर्ण दृश्य उत्पन्न होने से पहले लेआउट पेज निष्पादित हो जाते हैं। – adriaanp

उत्तर

2

निर्भरता इंजेक्शन डिजाइन द्वारा asp.net MVC के 3 लेआउट पन्नों में काम नहीं करता है (thats मतलब है कि में मास्टर पृष्ठ डि BaseView के लिए भी काम नहीं)। तो आप लेआउट पेजों के लिए LocalizationServiceUnityContainer के माध्यम से हल कर सकते हैं (इसलिए आपको HttpApplication के भीतर अपने कंटेनर को स्टोर करने की आवश्यकता है और इसके माध्यम से निर्भरता को हल करने के लिए कंटेनर तक पहुंचें)।

ActionFilters निर्भरता में BTW भी ​​काम नहीं करता है ..

संबंधित मुद्दे