4Manuals

  • PDF Cloud HOME

如何在ConfigureServices中将记录器实例传递给我的自定义ModelBinderProvider? Download

    获取Hough线的交点OpenCV C ++ 如何将字符串“ text1”设置为包含项目text1,text2,test3的组合框的选定项目? 为什么System.Net.Mail.MailAddress构造函数在域部分中解析带有斜杠“ /”的电子邮件? Android 10,API29:在应用程序文件夹中使用C ++库编写文件会使应用程序崩溃 Unity-LineRenderer没有出现在版本(2D)上 按下按钮后,电话中未显示通知 ASP.net,使用WebConfig httpErrors重定向到区域内的控制器不起作用 获取会议室详细信息 我们如何将参数Line转换为Station? 网络核心:查找实体框架核心的主键和反射

我想使用ASP.NET Core自己的日志记录和DI机制在我的代码中执行一些调试日志记录和跟踪。所以我的ModelBinderProvider看起来像这样:

public class MyOwnModelBinderProvider: // ... bla bla 
{
    public MyOwnModelBinderProvider(ILogger<MyOwnModelBinderProvider> logger)
    {
       // .. bla bla
    }
}

在Startup.cs中设置自定义ModelBinderProviders的推荐方法如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersAndViews(configure => 
        configure.ModelBinderProviders.Insert(0, 
            new MyOwnModelBinderProvider(/** WHAT TO PUT HERE? **/)));
}

我对此进行了研究,人们一直在通过在ConfigureServices方法中调用BuildServiceProvider来创建服务提供者的单独实例,但是David Fowler was strictly against that可能会创建一个从未释放的服务提供者集合的悬挂实例。

对我来说,传递一个logger实例对我来说也是一笔很大的开销。我在这里缺少明显的模式吗?我觉得应该容易得多。

1 个答案:

答案 0 :(得分:3)

我可以想到两种方法:

  1. 在GetBinder中,ModelBinderProviderContext有一个Services property。
  2. 您可以在对AddControllersAndViews的调用之外配置MvcOptions:
builder.Services.AddOptions<MvcOptions>()
                .Configure<ILoggerFactory>((options, loggerFactory) =>
                {
                    options.ModelBinderProviders.Add(new MyOwnModelBinderProvider(loggerFactory));
                });

这使您可以将依赖项传递给通过选项创建的事物。



Similar searches
    大型组件386/8086中的寻址模式 Erro std :: rethrow_exception C#8中的不可为空的引用类型在运行时是否可以为null? Django-获取按不同属性分组的queryset列表对象属性 字符串格式更改int的值(python)