Ninject,如何将会话中的对象注入我的业务类?

e36*_*6M3 0 c# asp.net dependency-injection ninject ioc-container

我在会话中有一个配置文件对象,其中包含当前登录用户的配置文件信息.我的魔杖能够将它注入我的业务类中,所以我可以在其中进行验证等,而不必在每个方法的参数列表中传递它.

我在我的ninject模块中尝试过类似的东西:

Profile profile = HttpContext.Current.Session["Profile"] as Profile;
Bind<Profile>().ToConstant(profile).InTransientScope();
Run Code Online (Sandbox Code Playgroud)

但是当我在我的aspx中执行Kernel.Get()时,它会以null引用而爆炸.BusinessObject通过构造函数获取配置文件.如果我硬编码配置文件而不是使用HttpContext,那么一切似乎都有效.不确定ToConstant是否可行,我真的在寻找每次创建新BusinessObject时都会得到评估的东西.

UPDATE

似乎要求在页面级对象内联上进行注入对于会话集合来说太早了.如果我移入Kernel.Get调用Page_Load它就可以了.

Bri*_*vez 5

我认为您的代码发生了什么,在您创建绑定时,会话配置文件为空.

你可能需要做这样的事情:

Bind<Profile>()
    .ToMethod(context => 
        HttpContext.Current.Session["Profile"] as Profile);
Run Code Online (Sandbox Code Playgroud)