每个请求依赖注入的用户上下文
User context per request dependency injection
我正在考虑为每个请求创建一个用户上下文。好像是这样,但就是感觉不对:
container.Register<UserContext>(() =>
{
var context = new UserContext();
//add runtime data...
return context;
});
然后将其注入基础服务层class以供重用。
任何人都可以指出更好的方向来完成这个吗?
提前致谢。
对象图的构造应该是reliable, so we can construct them with confidence. This basically means that we shouldn't construct them using runtime data.
HttpContext
及其属性是运行时数据,在对象图构造期间访问它:
causes ambiguity, complicates the composition root with an extra responsibility and makes it extraordinarily hard to verify the correctness of your DI configuration.
解决方案是重构 UserContext
,使 HttpContext
仅在其成员之一(构造函数除外)被访问时才被访问。这允许 UserContext
在不知道请求的情况下构建,甚至允许它成为无状态和单例。 referenced 文章显示了此类实现的示例:
class HttpSessionUserContext : IUserContext
{
public int CurrentUserId => (int)HttpContext.Session["userId"];
}
我正在考虑为每个请求创建一个用户上下文。好像是这样,但就是感觉不对:
container.Register<UserContext>(() =>
{
var context = new UserContext();
//add runtime data...
return context;
});
然后将其注入基础服务层class以供重用。
任何人都可以指出更好的方向来完成这个吗?
提前致谢。
对象图的构造应该是reliable, so we can construct them with confidence. This basically means that we shouldn't construct them using runtime data.
HttpContext
及其属性是运行时数据,在对象图构造期间访问它:
causes ambiguity, complicates the composition root with an extra responsibility and makes it extraordinarily hard to verify the correctness of your DI configuration.
解决方案是重构 UserContext
,使 HttpContext
仅在其成员之一(构造函数除外)被访问时才被访问。这允许 UserContext
在不知道请求的情况下构建,甚至允许它成为无状态和单例。 referenced 文章显示了此类实现的示例:
class HttpSessionUserContext : IUserContext
{
public int CurrentUserId => (int)HttpContext.Session["userId"];
}