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

时间:2010-10-29 13:43:16

标签: c# asp.net dependency-injection ioc-container ninject

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

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

Profile profile = HttpContext.Current.Session["Profile"] as Profile;
Bind<Profile>().ToConstant(profile).InTransientScope();

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

更新

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

1 个答案:

答案 0 :(得分:5)

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

你可能需要这样做:

Bind<Profile>()
    .ToMethod(context => 
        HttpContext.Current.Session["Profile"] as Profile);