है मैं एक साधारण NinjectModule के साथ एक ASP.NET MVC अनुप्रयोग है:त्रुटि HttpContext को सक्रिय - एक से अधिक मिलान बाध्यकारी उपलब्ध
public class MainModule : NinjectModule
{
public override void Load()
{
Bind<AppSettings>().ToSelf().InSingletonScope();
Bind<HttpContext>().ToMethod(context => HttpContext.Current); // <-- problem
Bind<MainDbContext>().ToSelf().InRequestScope();
Bind<UserInfo>().ToSelf().InRequestScope();
}
}
यह अपने पूरे अनुप्रयोग में केवल बाध्यकारी कोड है। जब मैं अपने अनुप्रयोग चलाने, मैं तुरंत इस रनटाइम त्रुटि मिलती है:
Error activating HttpContext
More than one matching bindings are available.
Activation path:
3) Injection of dependency HttpContext into parameter httpContext of constructor of type UserInfo
2) Injection of dependency UserInfo into parameter userInfo of constructor of type HomeController
1) Request for HomeControllerSuggestions:
1) Ensure that you have defined a binding for HttpContext only once.
त्रुटि संदेश कह रही है कि मैं परिभाषित किया है HttpContext
एक बार से अधिक बाध्यकारी है, लेकिन पूरे आवेदन में केवल बाध्यकारी बयान में हैं लगता है MainModule
, और मैंने स्पष्ट रूप से केवल HttpContext
के लिए बाध्यकारी परिभाषित किया है। अगर मैं कोड की उस पंक्ति को टिप्पणी करता हूं, तो मुझे त्रुटि मिलनी बंद हो जाती है, लेकिन HttpContext
जो इंजेक्शन प्राप्त करता है वह सही नहीं है (यह HttpContext.Current
के बजाय एक खाली, नया तत्काल HttpContext
है)।
त्रुटि संदेश सटीक इंजेक्शन अनुक्रम मैं होने की उम्मीद होती है ...
HttpContext
UserInfo
के निर्माता में इंजेक्ट किया जाना चाहिए, जो इस तरह दिखता है का वर्णन करता है:
public class UserInfo
{
private readonly HttpContext _httpContext;
public UserInfo(HttpContext httpContext)
{
_httpContext = httpContext;
}
// ... etc ... //
}
और UserInfo
चाहिए HomeController
के कन्स्ट्रक्टर में इंजेक्शन प्राप्त करें, जो इस तरह दिखता है:
public class HomeController : Controller
{
private readonly AppSettings _appSettings;
private readonly UserInfo _userInfo;
public HomeController(AppSettings appSettings, UserInfo userInfo)
{
_appSettings = appSettings;
_userInfo = userInfo;
ViewData[Token.AppSettings] = _appSettings;
ViewData[Token.UserInfo] = _userInfo;
}
// ... actions here ... //
}
इसका परिणाम क्यों एक त्रुटि में है? यह एक बहुत ही सरल निर्भरता इंजेक्शन परिदृश्य की तरह लगता है। HttpContext
के लिए एक से अधिक बार बाध्यकारी को परिभाषित करने के तरीके में मैं किस तरह से परिभाषित कर रहा हूं?
आपने हमें मुख्य मॉड्यूल दिखाया है। आपने हमें बताया है कि क्या आप Ninject.Web.MVC3 और/या जहां आपका कर्नेल बनाया जा रहा है, का उपयोग कर रहे हैं। त्रुटि दृढ़ता से सुझाव देती है कि आप मॉड्यूल लोड को एक से अधिक कर्नेल में एक से अधिक बार निष्पादित कर रहे हैं, उदा। इसे 'ग्लोबल'/'एचटीपी एप्लीकेशन' निर्माण/शुरूआत में ट्रिगर करके (जिसमें से लगभग हमेशा> 1) होते हैं। –