如何使用支持ASP.NET Core中的依赖项注入的自定义模型绑定器?

Jer*_*ong 5 c# dependency-injection model-binding autofac asp.net-core

我正在尝试在MVC中使用自定义模型绑定程序,该绑定程序需要从IoC容器中解析。我遇到的问题是,在添加MVC服务时无法访问我的容器,因为还没有构建我的容器(并且我需要在构建容器之前添加MVC)。感觉就像是鸡/鸡蛋的问题,我确信我缺少一个简单的解决方案。

例:

services.AddMvc().AddMvcOptions(options =>
{
     options.ModelBinders.Add(serviceProvider.Resolve<CustomModelBinder>());
});
Run Code Online (Sandbox Code Playgroud)

我的自定义模型活页夹如下所示:

public class CustomModelBinder : IModelBinder
{
    private IServiceProvider serviceProvider;

    public CustomModelBinder(IServiceProvider serviceProvider)
    {
        this.serviceProvider = serviceProvider;
    }

    public Task<ModelBindingResult> BindModelAsync(ModelBindingContext bindingContext)
    {
        var model = serviceProvider.GetService(bindingContext.ModelType);
        bindingContext.Model = model;

        var binder = new GenericModelBinder();
        return binder.BindModelAsync(bindingContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*gan 5

根据此处的帖子:https : //github.com/aspnet/Mvc/issues/4167

要直接回答您的问题,请使用:

bindingContext.OperationBindingContext.ActionContext.HttpContext.RequestServices
Run Code Online (Sandbox Code Playgroud)

附带说明一下,您还可以选择使用[FromServices]来为您解决问题。