2010-07-13 12 views
6

से विरासत में प्राप्त मेरे कस्टम नियंत्रक में नल कंट्रोलर कॉन्टेक्स्ट मैंने अपने स्वयं के नियंत्रक वर्ग का निर्माण किया जो BaseController से विरासत में मिला। हालांकि ControllerContext कन्स्ट्रक्टर में "शून्य" है। मुझे ControllerContext कहां निर्दिष्ट करना चाहिए?बेस नियंत्रक

उत्तर

19

ControllerContext संपत्ति आपके विरासत पदानुक्रम में किसी भी मूल रचनाकार में असाइन नहीं की गई है। एक नियंत्रक एक नियंत्रक कारखाने द्वारा बनाया गया है और ControllerContext संपत्ति के बिना असाइन किया गया है।

protected virtual void Initialize(RequestContext requestContext) 
{ 
    this.ControllerContext = new ControllerContext(requestContext, this); 
} 

Initialize विधि आभासी निष्पादित विधि कॉल से शुरू हो जाती है:

protected virtual void Execute(RequestContext requestContext) 
{ 
    if (requestContext == null) 
    { 
     throw new ArgumentNullException("requestContext"); 
    } 
    this.VerifyExecuteCalledOnce(); 
    this.Initialize(requestContext); 
    this.ExecuteCore(); 
} 

यह है, जिस पर जल्द से जल्द बात का मतलब है

परावर्तक का उपयोग करना, हम जहां काम हो जाता है देख सकते हैं आप ControllerContext संपत्ति का उपयोग Execute या Initialize विधि को ओवरराइड करके कर सकते हैं (लेकिन base.Execute या base.Initialize पहले कॉल करना):

protected override void Execute(RequestContext requestContext) 
{ 
    base.Execute(requestContext); 

    // .ControllerContext is available from this point forward. 
} 

protected override void Initialize(RequestContext requestContext) 
{ 
    base.Initialize(requestContext); 

    // .ControllerContext is available from this point forward. 
} 

उत्तरार्द्ध (Initialize) पूर्ण जल्द से जल्द बिंदु है जिस पर आप ControllerContext संपत्ति का उपयोग कर सकते, जब तक आप (काम अपने आप को, जो अनुशंसित नहीं है संभाला के रूप में ढांचे के कुछ हिस्सों कि संपत्ति होने पर निर्भर हो जाएगा उस समय सौंपा गया)।

उम्मीद है कि मदद करता है।

+0

धन्यवाद। मुझे इसी की जरूरत थी। –

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