我很难尝试将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();
看起来像一些简单而愚蠢的事情,但是我还不足以得到它。有任何想法吗? 谢谢!
答案 0 :(得分:1)
对于IEnumerable<IInputFormatters>
,它没有注册为服务,因此您无法解析它或无法从依赖注入中访问它。
对于InputFormatters
或ModelBinderProviders
,它们被附加到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;
}