gpt4 book ai didi

asp.net-mvc - 激活 HttpContext 时出错 - 有多个匹配的绑定(bind)可用

转载 作者:行者123 更新时间:2023-12-04 15:03:11 26 4
gpt4 key购买 nike

我有一个带有简单 NinjectModule 的 ASP.NET MVC 应用程序:

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();
}
}

这是我整个应用程序中唯一的绑定(bind)代码。当我运行我的应用程序时,我立即收到此运行时错误:

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 HomeController

Suggestions:
1) Ensure that you have defined a binding for HttpContext only once.



错误消息似乎是说我已经定义了 HttpContext绑定(bind)不止一次,但整个应用程序中唯一的绑定(bind)语句在 MainModule ,而且我显然只为 HttpContext 定义了一个绑定(bind)。 .如果我注释掉那行代码,我不会再收到错误,但是 HttpContext被注入(inject)是不正确的(它是一个空的、新实例化的 HttpContext 而不是 HttpContext.Current )。

错误消息确实描述了我期望发生的确切注入(inject)顺序......
HttpContext应该被注入(inject)到 UserInfo 的构造函数中,看起来像这样:
public class UserInfo
{
private readonly HttpContext _httpContext;

public UserInfo(HttpContext httpContext)
{
_httpContext = httpContext;
}

// ... etc ... //
}

UserInfo应该被注入(inject)到 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 ... //
}

为什么这会导致错误?这似乎是一个非常简单的依赖注入(inject)场景。我以什么方式定义 HttpContext 的绑定(bind)?不止一次?

最佳答案

如果您使用的是 Ninject.MVC3 扩展,则必须删除

Bind<HttpContext>().ToMethod(context => HttpContext.Current); // <-- problem

因为扩展已经添加了 HttpContext 绑定(bind)。

关于asp.net-mvc - 激活 HttpContext 时出错 - 有多个匹配的绑定(bind)可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com