У меня есть приложение ASP.NET MVC с простым модулем NinjectModule:
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();
}
}
Это единственный обязательный код во всем моем приложении.Когда я запускаю свое приложение, я сразу же получаю эту ошибку во время выполнения:
Ошибка активации HttpContext
Доступно несколько сопоставлений.
Путь активации:
3) Внедрение зависимостиHttpContext в параметр httpContext конструктора типа UserInfo
2) Внедрение зависимости UserInfo в параметр userInfo конструктора типа HomeController
1) Запрос на HomeController
Предложения:
1) Убедитесь, что выопределили привязку для HttpContext только один раз.
В сообщении об ошибке говорится, что я определил привязку 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
более одного раза?