У меня есть приложение ASP.NET MVC с помощью простого NinjectModule:Ошибка активации 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
, а не HttpContext.Current
).
ошибка делает описать точную последовательность впрыска, я бы ожидать, чтобы произойти ...
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 и/или где создается ваше Ядро. Ошибка настоятельно предполагает, что вы выполняете загрузку модулей в одно ядро более одного раза, например. путем запуска его в вас «Global' /' HttpApplication' construction/start (из которых почти всегда> 1). –