没有在 Model Binder Provider 中注入我的服务

Not getting my service injected in Model Binder Provider

有什么原因导致我没有将服务注入到我的自定义 RegisterBinderProvider 中吗?

            services.AddScoped<IPasswordHasher, PasswordHasher>();

            services.AddMvc(options =>
            {
                RegisterBinderProvider registerBinderProvider = 
                     DependencyResolver.Current.GetService<RegisterBinderProvider>();
                options.ModelBinderProviders.Insert(0, registerBinderProvider);
                options.Filters.Add(typeof(ApiExceptionFilter));
            });

在这段代码之后,当我在 RegisterBinderProvider class 中时,我看到 PasswordHasher 服务的值为空。但是,我在插入RegisterBinderProvider之前检查了已经注入的服务,我可以在其中找到PasswordHasher。

如果您需要,这是我的自定义 BinderProvider:

    public class RegisterBinderProvider : IModelBinderProvider
    {
        private readonly IPasswordHasher _passwordHasher;

        public RegisterBinderProvider(IPasswordHasher passwordHasher)
        {
            _passwordHasher = passwordHasher;
        }

        public IModelBinder GetBinder(ModelBinderProviderContext context)
        {
            if (context.Metadata.ModelType == typeof(User))
            {
                return new RegisterBinder(_passwordHasher);
            }

            return null;
        }
    }

我希望我提供了足够的信息来理解我的问题,谢谢!

您可以使用 context 参数在 GetBinder 方法中重新添加服务:

public IModelBinder GetBinder(ModelBinderProviderContext context)
{
        var service = context.Services.GetRequiredService<IPasswordHasher>();
        if (context.Metadata.ModelType == typeof(User))
        ...
}

由于您只创建了 RegisterBinderProvider 的一个实例并调用了一次 AddMvcModelBinderProviders.Insert 方法,因此尝试解决一个问题没有多大意义启动时的作用域服务。