【发布时间】:2013-07-02 13:41:31
【问题描述】:
在我们的 ASP.NET MVC 项目中,我们使用 Ninject 来解决控制器所需的依赖项。
其中一个依赖项是当前用户HttpContext.Current.User.Identity。如果用户通过了身份验证,我们希望实例化一个用户对象和几个依赖它的服务。但我们不想手动执行此操作,而是让 ninject 将这些实例注入控制器。
所以我们现在遇到了麻烦,因为当然可以在不经过身份验证的情况下定位 url。然后 ninject 尝试在 asp.net 重定向到登录页面之前解析实例。
我能想到解决方案,我们配置 ninject 只在用户通过身份验证时注入:
kernel.Bind<User>().ToMethod(GetUser).When(context => HttpContext.Current.User.Identity.IsAuthenticated).InRequestScope();
这里的问题是,即使用户没有经过身份验证,ninject 也会实例化一个默认对象,所以我的服务会崩溃或无论如何都需要检查实例。
空检查会让我更容易接受,但我不想激活 Ninject 的 AllowNullInjection 设置。
所以我的问题是做这种有条件的事情的最佳做法是什么? 在这些情况下我是否可以使用 Ninject 功能,或者我不应该注入这些依赖项?
【问题讨论】:
标签: c# .net asp.net-mvc dependency-injection ninject