Не удается внедрить мою услугу в провайдер связывания моделей - PullRequest
1 голос
/ 26 мая 2020

Есть ли причина, по которой я не получаю внедренную службу в свой пользовательский 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, я вижу значение 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;
        }
    }

I надеюсь, я предоставил достаточно информации, чтобы понять мою проблему, спасибо!

1 Ответ

0 голосов
/ 26 мая 2020

Вы можете повторно полюбить службу в методе GetBinder, используя параметр context:

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

Поскольку вы создаете только один экземпляр своего RegisterBinderProvider и вызываете AddMvc и ModelBinderProviders.Insert один раз, бессмысленно пытаться разрешить службу с заданной областью при запуске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...