Lamar AddScoped无法按预期方式工作

我有netcore webapi项目,并且我正在使用Lamar进行DI。我有一个MyContextService服务,我注册为作用域

    public class LifetimeRegistry : ServiceRegistry
    {
        public LifetimeRegistry()
        {
            this.AddScoped<MyContextService>();
        }
    }

我在2个地方使用此服务,首先是在授权处理程序中(在这里我也设置了上下文)。

    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个实例具有不同的哈希码。我在这里做什么错了?

iCMS 回答:Lamar AddScoped无法按预期方式工作

回答我自己的问题,希望这对其他人有帮助。问题在于queue是单例,而TokenRequirementHandler是作用域。当您考虑它时,这很有道理,但当时还不那么明显。

我的解决方案是使MyContextService具有范围。

本文链接:https://www.f2er.com/2031547.html

大家都在问