Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检索配置';选项';ModelBinder中的实例?_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 如何检索配置';选项';ModelBinder中的实例?

C# 如何检索配置';选项';ModelBinder中的实例?,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我正在构建一个自定义ModelBinder,需要从中检索启动时设置的MvcJsonOptions配置实例 services.AddMvc(options => {...}) .AddJsonOptions(options => { //I need this 'option' instance from my model binder }); 不确定我是否应该从服务提供商处检索它们,检索它们的最佳方法是什么?Dunno谁告诉过你它不可检索,但所有配置都是通过DI注册的,即使

我正在构建一个自定义ModelBinder,需要从中检索启动时设置的MvcJsonOptions配置实例

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

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

});

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

Dunno谁告诉过你它不可检索,但所有配置都是通过DI注册的,即使是
mvcopions
MvcJsonOptions
,正如你在源代码上清楚看到的那样

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;
    }
}
公共类MyBinder:IModelBinder
{
私有只读MVCJSONOOPTIONS jsonOptions;
公共MyBinder(选项)
{
jsonOptions=options?.Value??抛出新的ArgumentNullException(nameof(options));
}
公共任务BindModelAsync(ModelBindingContext bindingContext)
{
//你的绑定逻辑在这里
...
返回Task.CompletedTask;
}
}

谁说它不能通过DI检索?谢谢你的帮助。剩下的一个问题是ModelBinderProvider是在构建serviceProvider之前以及在声明MvcJsonOption之前创建的。有没有办法在以后全局检索serviceProvider?ModelBinderProvider不需要任何外部依赖项。ModelBinderProvider仅用于创建和返回活页夹。活页夹应该是接收依赖项的活页夹。您应该返回
returnnewbindertypemodelbinder(typeof(MyBinder))
返回需要依赖项injectedYep的绑定,几天前刚刚发布了自定义模型绑定文档。回答得好。
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;
    }
}
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;
    }
}