为您提供一些背景信息:
我创建了一个多租户Web应用程序。
在这里,对于任何请求,请按照以下步骤进行操作
1. Fetch the user information such as ID from HttpContext object
2. Then getting the approprate db name from a common db.
3. Updating the dbContext with the db name
4. And all my repository classes are instantiated based on this updated dbContext
在类库项目(服务层)中完成前2个步骤,在该项目中,为了获得用户ID,我必须访问被手动引用的HttpContext Object。 >(将dll并复制到文件夹中并添加到项目中)
正确的方法是什么?在类库项目中使用NetCore库是更好的主意吗?
答案 0 :(得分:2)
尚不清楚您在这里做什么,但是对于HttpContext
,有几点可以帮助您:
仅提供参考文献还不够。您必须手动删除DLL的事实只会增加这种方法无法正常工作的可能性。 HttpContext
仅存在于请求管道的上下文中。不管您是否可以编译一些代码,如果代码不在该管道中运行,HttpContext
将为空,对您毫无用处。
无论如何,库类通常都不应依赖于HttpContext
之类的东西。如果在库类中需要类似用户ID的内容,则应将用户ID本身传递到构造函数或方法中(取决于哪一个最有意义)。如何从HttpContext
获取用户ID的逻辑是您的类可能不应该拥有的领域知识。
如果要直接使用HttpContext
,则应注入IHttpContextAccessor
。这将要求您使用services.AddHttpContextAccessor()
在ASP.NET Core应用程序中添加服务。完成此操作后,即可通过该访问器实例获取当前请求的HttpContext
。但是,如果您不在请求管道中,它将仍然为null。