Asp.net core 自动传真寄存器IHttpContextAccessor

Asp.net core 自动传真寄存器IHttpContextAccessor,asp.net-core,autofac,Asp.net Core,Autofac,我使用autofac属性自动连线方法(ASP.NET核心)。 我需要的是在类库项目中获取当前用户。我怎么做?我想要这样的东西 public IHttpContextAccessor ContextAccessor{ get; set; } 然后像这样使用它 Context.HttpContext.User.Claims.First(i => i.Type == "NameIdentifier" 是否可以这样做,或者我是否应该使用其他方法进行此操作?注意:以下仅在使用ASP.NET Co

我使用autofac属性自动连线方法(ASP.NET核心)。 我需要的是在类库项目中获取当前用户。我怎么做?我想要这样的东西

public IHttpContextAccessor ContextAccessor{ get; set; }
然后像这样使用它

Context.HttpContext.User.Claims.First(i => i.Type == "NameIdentifier"

是否可以这样做,或者我是否应该使用其他方法进行此操作?

注意:以下仅在使用ASP.NET Core注册Autofac时有效,如所述或所述

如果不需要对属性使用自动布线,我建议您执行以下操作

首先,将依赖项注册为(是的,这不是问题,MS也有)

现在你可以走了!我相信你可以让它与物业自动布线,但我不熟悉这种方法

作为旁注:

如果您想要检索经过身份验证的用户的信息,我听说并且已经读到,建议编写类似于
ApplicationUser
类的东西来包装底层框架逻辑

我实现了类似的东西,它还使用
IHttpContextAccessor
检索所需的声明+我正在向autofac注册访问器。唯一的区别是我使用的是构造函数注入


我希望这对你有帮助

您需要确保已注册
IHttpContextAccessor
。这不是自动完成的。最好不要使用属性注入,而是使用构造函数注入,因为
IHttpContextAccessor
似乎是一个强制依赖项。要注册它,只需调用
services.AddHttpContextAccessor()
@Steven我不认为使用不同的DI和方法是个好主意。你能详细解释一下“使用不同的DI和方法”是什么意思吗?@Steven我们使用autofac进行DI,而不是在microsoft容器中构建,所以对我来说,使用它会很混乱。至于方法,有自动属性注入,而不是通过构造函数。因此,在同一类中使用几个autoproperty injection和ctor injectionAutofac将不利于替换内置容器,因此即使您调用
services.AddSomething,也会将其添加到Autofac。除此之外,对于ASP.NET核心,您*需要*将
IHttpContextAccessor`添加到框架使用的容器中(很可能使用
AddHttpContextAccessor()
)。如果不这样做,它的
HttpContext
属性将永远不会被设置。
builder.RegisterType<HttpContextAccessor>()
   .As<IHttpContextAccessor>()
   .SingleInstance();
public MyClass(IHttpContextAccessor httpContextAccessor)
{
   ContextAccessor = httpContextAccessor;
}