注入IEnumerable <iinputformatters>

时间:2018-10-11 16:30:31

标签: asp.net-core-2.0

我很难尝试将IEnumerable<IInputFormatters>注入其他服务。 我已经注册了自己的InputFromatter,还添加了JsonFormatters。因此,至少应该有3个输入格式化程序,但是当我尝试注入IEnumerable<IInputFormatters>时,我一直在获取null(就像根本没有格式化程序一样)。 我的注册如下:

services.AddMvcCore(config =>
            {
                config.InputFormatters.Insert(0, new UserContextFormatter());
                config.ModelBinderProviders.Insert(0, new ModelBinderProvider());
            })
                .AddAuthorization()
                .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<Startup>())
                .AddJsonOptions(opt =>
                {
                    opt.SerializerSettings.Formatting = Formatting.Indented;
                    opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                    opt.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
                    opt.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
                })
                .AddJsonFormatters()
                .AddApiExplorer();

看起来像一些简单而愚蠢的事情,但是我还不足以得到它。有任何想法吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

对于IEnumerable<IInputFormatters>,它没有注册为服务,因此您无法解析它或无法从依赖注入中访问它。

对于InputFormattersModelBinderProviders,它们被附加到Action<MvcOptions> setupAction,因此您可以从IOptions<MvcOptions>访问它们。

请尝试以下代码:

    public class HomeController : ControllerBase
{
    private readonly MvcOptions _options;
    public HomeController(IOptions<MvcOptions> options)
    {
        _options = options.Value;
        var inputFormatters = _options.InputFormatters;
        var outputFormatters = _options.OutputFormatters;
        var modelBinderProviders = _options.ModelBinderProviders;
    }