2011-11-07 7 views
5

मुझे लगता है कि सरल सवाल है, लेकिन मैंने अपने नियंत्रकों के लिए बेस इंजेक्शन के माध्यम से कुछ सेवाओं को इंजेक्शन देने के लिए बेस क्लास प्राप्त करने का प्रयास करने में एक घंटे बिताए हैं। संपत्तियों को पहली बार संरक्षित किया गया था, लेकिन वस्तुओं को सार्वजनिक रूप से बदलने के बाद, वस्तुओं ने काम किया। क्या संपत्तियों को संरक्षित करने और आईओसी को काम करने के लिए वैसे भी है?बेस क्लास में निलंबित संपत्तियों को निलंबित क्यों नहीं करेगा?

यहां मेरा सेटअप है।

public class BaseController : Controller 
{ 
    [Inject] 
    protected LoggingInterface.ILogger<BaseController> Logger { set; get; } 

    [Inject] 
    protected IRepository Repository { set; get; } 

    protected override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     .... 

     base.OnAuthorization(filterContext); 
    } 
} 

और NinjectMVC3 App_Start

private static void RegisterServices(IKernel kernel) 
    { 
     kernel.Bind(typeof(LoggingInterface.ILogger<>)).To(typeof(Log4NetLogger<>)); 
     kernel.Bind<IRepository>().To<Repository>(); 
     kernel.Bind<IUserService>().To<UserService>(); 
    } 

में बूट-साईस गुण भी सार्वजनिक सेटर की जरूरत नहीं है में धन्यवाद, स्टीफन

उत्तर

6

आप इंजेक्षन नहीं कर सकते। आपके लॉगर और रिपोजिटरी गुण दोनों संरक्षित हैं, इसलिए निनजेक्ट को उन्हें एक मान असाइन करने का कोई तरीका नहीं है। यदि आप इसे प्राप्त करना चाहते हैं तो आपको अपनी सेटर दृश्यता बदलनी होगी। या कन्स्ट्रक्टर इंजेक्शन का उपयोग करें। हालांकि यह भंडार संपत्ति के लिए सही मायने रखता है जो आवश्यक लगता है कि यह लॉगर संपत्ति के लिए समझ में नहीं आता है। तो मुझे लगता है कि आपको इसे सार्वजनिक करना होगा।

+1

धन्यवाद डारिन, यही वह था जो मैंने बस इसके साथ खेलने से निष्कर्ष निकाला था। गुणों के लिए अनिवार्य कारण यह है कि वंशजों को सीटीआर इंजेक्शन के साथ मिलकर मिल जाता है। ध्यान रखें। –

4

सुंदर यकीन है कि NinjectSettings पर InjectNonPublic झंडा आपको उसे कॉन्फ़िगर करना आप क्या चाहते करने के लिए अनुमति देता है - closest link I can find quickly

यह समय की किसी भी महत्वपूर्ण लंबाई के लिए समर्थन दिया जा रहा है या नहीं, मैं नहीं जानता कि - इंजेक्शन लगाने साधारण सैनिक है बस एक बुरा विचार (संपत्ति इंजेक्शन और संबंधित scoundrels के साथ: पी)