gpt4 book ai didi

c# - 如何从 ModelBinder 中检索配置 'Options' 实例?

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:33 24 4
gpt4 key购买 nike

我正在构建自定义 ModelBinder,我需要检索在 Startup from 中设置的 MvcJsonOptions 配置实例

services.AddMvc(options => {...})
.AddJsonOptions(options => {

//I need this 'option' instance from my model binder

});

不确定我是否应该从服务提供商处取回它们,取回它们的最佳方法是什么?

最佳答案

不知道谁告诉你它不可检索,但所有配置都是通过 DI 注册的,甚至是 MvcOptionsMvcJsonOptions ,正如您在源代码中可以清楚地看到的那样 here

public static IMvcBuilder AddJsonOptions(
this IMvcBuilder builder,
Action<MvcJsonOptions> setupAction)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}

if (setupAction == null)
{
throw new ArgumentNullException(nameof(setupAction));
}

// configure registers it with the DI system
builder.Services.Configure(setupAction);
return builder;
}

也就是说,您需要做的就是注入(inject) IOptions<MvcJsonOptions>在任何需要它的地方访问options.Value属性来获取实例。

更新

正如评论中指出的那样,IModelBinderProvider不应该注入(inject)依赖项。 IModelBinderProvider仅用于创建 Binder ,不应有任何外部依赖。

public class MyBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context == null)
throw new ArgumentNullException(nameof(context));

if (/* some condition to identify your model */)
return new BinderTypeModelBinder(typeof(MyBinder));

return null;
}
}

MyBinder应该有依赖项:

public class MyBinder : IModelBinder
{
private readonly MvcJsonOptions jsonOptions;

public MyBinder(IOptions<MvcJsonOptions> options)
{
jsonOptions = options?.Value ?? throw new ArgumentNullException(nameof(options));
}

public Task BindModelAsync(ModelBindingContext bindingContext)
{
// Your binding logic here
...
return Task.CompletedTask;
}
}

关于c# - 如何从 ModelBinder 中检索配置 'Options' 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43830748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com