【发布时间】:2020-10-20 06:38:55
【问题描述】:
我有 netcore webapi 项目,我正在使用 Lamar 进行 DI。我有一个服务 MyContextService 我注册为范围
public class LifetimeRegistry : ServiceRegistry
{
public LifetimeRegistry()
{
this.AddScoped<MyContextService>();
}
}
我在两个地方使用此服务,首先是在授权处理程序中(我还设置了上下文)。
public class TokenRequirement : IAuthorizationRequirement { }
public class TokenRequirementHandler : AuthorizationHandler<TokenRequirement>, IAuthorizationRequirement
{
private readonly MyContextService _cxtService;
public TokenRequirementHandler(MyContextService cxtService)
{
_cxtService = _cxtService;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, TokenRequirement requirement)
{
// other code..
_cxtService.InitContext(); // This sets some context that's valid for this http request
}
}
第二个位置是在控制器中
[Authorize(Policy = "TokenRequired")]
public class MyController
{
private readonly MyContextService _cxtService;
public MyController(MyContextService cxtService)
{
_cxtService = _cxtService;
// The context is null & service has a different hashcode
var cxt = _cxtService.GetContext();
}
}
在这个控制器中,我希望设置上下文,但事实并非如此,我注意到这 2 个实例具有不同的哈希码。我在这里做错了什么?
【问题讨论】:
-
MyContextService是否注入了任何依赖项? -
@JohanP 不,不是。
标签: c# asp.net-web-api .net-core lamar