J'ai une application ASP.NET MVC avec un simple NinjectModule:Erreur activation HttpContext - Plus d'un correspondant de liaison est disponible
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();
}
}
C'est le seul code de liaison dans mon application ensemble. Quand je lance mon application, je reçois immédiatement cette erreur d'exécution:
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.
Le message d'erreur semble dire que je l'ai défini le HttpContext
liant plus d'une fois, mais les seules déclarations de liaison dans l'ensemble de l'application sont en MainModule
, et j'ai clairement défini seulement une liaison pour HttpContext
. Si je commente cette ligne de code, j'arrête d'obtenir l'erreur, mais le HttpContext
qui est injecté n'est pas correct (il s'agit d'un HttpContext
nouvellement instancié, plutôt que).
Le message d'erreur décrit bien la séquence d'injection exacte j'attendre de se produire ...
HttpContext
devrait obtenir injecté dans le constructeur de UserInfo
, qui ressemble à ceci:
public class UserInfo
{
private readonly HttpContext _httpContext;
public UserInfo(HttpContext httpContext)
{
_httpContext = httpContext;
}
// ... etc ... //
}
Et UserInfo
devrait être injecté dans le constructeur de HomeController
, qui ressemble à ceci:
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 ... //
}
Pourquoi cela entraîne-t-il une erreur? Cela ressemble à un scénario d'injection de dépendance très simple. De quelle manière suis-je en train de définir la liaison pour HttpContext
plus d'une fois?
Vous nous avez montré le module principal. Vous n'avez pas dit si vous utilisez Ninject.Web.MVC3 et/ou où votre noyau est créé. L'erreur suggère fortement que vous exécutez les charges de module dans un seul noyau plus d'une fois, par ex. en le déclenchant dans votre construction 'Global' /' HttpApplication'/start (dont il y a presque toujours> 1). –