- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的问题,我只想将一个 HttpSessionStateBase
对象注入(inject)到我的类中,以便它可以测试。由于 HttpSessionStateBase
与 HttpContextBase
相关,并且每个 Web 请求都应更改它,因此我使用 InRequestScope()
来确定对象的范围。
这是我的模块定义:
public class WebBusinessModule : NinjectModule
{
public override void Load()
{
this.Bind<CartManager>().ToSelf().InSingletonScope();
this.Bind<ISessionManager>().To<SessionManager>().InRequestScope()
.WithConstructorArgument("session", ctx => HttpContext.Current == null ? null : HttpContext.Current.Session)
.WithPropertyValue("test", "test");
}
}
这是 SessionManager
类:
public class SessionManager : ISessionManager
{
[Inject]
public SessionManager(HttpSessionStateBase session)
{
this.session = session;
}
public SessionModel GetSessionModel()
{
SessionModel sessionModel = null;
if (session[SESSION_ID] == null)
{
sessionModel = new SessionModel();
session[SESSION_ID] = sessionModel;
}
return (SessionModel)session[SESSION_ID];
}
public void ClearSession()
{
HttpContext.Current.Session.Remove(SESSION_ID);
}
private HttpSessionStateBase session;
[Inject]
public string test { get; set; }
private static readonly string SESSION_ID = "sessionModel";
}
很简单,但是启动项目的时候,抛出如下异常:
Error activating HttpSessionStateBase
No matching bindings are available, and the type is not self-bindable.
Activation path:
3) Injection of dependency HttpSessionStateBase into parameter session of constructor of type SessionManager
2) Injection of dependency SessionManager into property SessionManager of type HomeController
1) Request for HomeController
Suggestions:
1) Ensure that you have defined a binding for HttpSessionStateBase.
2) If the binding was defined in a module, ensure that the module has been loaded into the kernel.
3) Ensure you have not accidentally created more than one kernel.
4) If you are using constructor arguments, ensure that the parameter name matches the constructors parameter name.
5) If you are using automatic module loading, ensure the search path and filters are correct.
即使我删除了“ session ”构造函数参数,只留下“测试”属性,我仍然会出现这样的错误!
最佳答案
问题是 HttpSessionState
没有继承自 HttpSessionStateBase
。 HttpSessionStateBase
是 ASP MVC 的新概念 - 更多信息请点击此处:Why are there two incompatible session state types in ASP.NET?
尝试用 HttpSessionStateWrapper
包装 HttpContex.Current.Session
:
.WithConstructorArgument("session", x => HttpContext.Current == null ?
null :
new HttpSessionStateWrapper(HttpContext.Current.Session));
关于c# - Ninject:WithConstructorArgument 和 WithPropertyValue 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995658/
示例代码如下: using Ninject; using Ninject.Activation; using Ninject.Extensions.Factory; using Ninject.Pla
我有一个简单的问题,我只想将一个 HttpSessionStateBase 对象注入(inject)到我的类中,以便它可以测试。由于 HttpSessionStateBase 与 HttpContex
我需要指向 Ninject 绑定(bind)中的一个方法作为构造函数参数的一部分。该类的构造函数如下所示: MyObject(Func param1, TimeSpan time) 我一直在寻找,但未
我有以下 RegisterServices 函数: private static void RegisterServices(IKernel kernel) { kernel.Bind().T
我对 WithConstructorArgument 的理解可能是错误的,因为以下内容不起作用: 我有一个服务,我们称它为 MyService,其构造函数采用多个对象和一个名为 testEmail 的
我正在使用 C#、.NET Framework 4.7 和 Ninject 3.2.2.0 开发 ASP.NET MVC 5。 我正在尝试使用多重绑定(bind),但我不知道该怎么做: contain
我有一个 MVVM WP7 应用程序,我在其中尝试将值从一个页面/ViewModel 发送到第二个 ViewModel 的构造函数。我已经设置了 Ninject,并使用如下一行让它与静态测试值一起工作
我是一名优秀的程序员,十分优秀!