Asp.net mvc 使用DI获取适当的存储库以向会话提供数据

Asp.net mvc 使用DI获取适当的存储库以向会话提供数据,asp.net-mvc,dependency-injection,Asp.net Mvc,Dependency Injection,当用户请求登录页面时,将调用LoginController,ninject将向控制器注入适当的存储库(比如IAccountRepository)。如果登录成功,我将从存储库中获取用户信息,然后存储在会话中(比如AccInfo)。但是,如果用户有一个有效的授权cookie返回到我的站点,那么AccInfo在会话中不存在,但我想在另一个控制器中使用它(该控制器首先不需要注入accountrepository)。 我现在该怎么办?我不想调用具体的对象(比如AccountRepository实例)来从d

当用户请求登录页面时,将调用LoginController,ninject将向控制器注入适当的存储库(比如IAccountRepository)。如果登录成功,我将从存储库中获取用户信息,然后存储在会话中(比如AccInfo)。但是,如果用户有一个有效的授权cookie返回到我的站点,那么AccInfo在会话中不存在,但我想在另一个控制器中使用它(该控制器首先不需要注入accountrepository)。
我现在该怎么办?我不想调用具体的对象(比如AccountRepository实例)来从db获取信息,我仍然希望在这种情况下使用DI。

也许您不应该在会话中存储AccInfo?只需存储userId或类似的东西,然后始终注入存储库,并使用userId检索必要的内容


如果希望最小化数据库访问,请使用存储库中的缓存。

谢谢。所以我必须把IAccountRepository注入我所有的控制器?您能给我一些关于在我的存储库中缓存的详细信息吗?一种替代方法是使用基本控制器,并在
OnActionExecuting
方法中解析存储库。然后可以将
AccInfo
分配给某个实例变量,该变量可以从继承类访问。关于缓存,这在一定程度上取决于您的需求和设置,但请查看
System.Runtime.caching.MemoryCache类以获得一个简单的选项