简体   繁体   English

没有修改闭包的ASP.NET Core MvcOptions依赖项注入?

[英]ASP.NET Core MvcOptions dependency injection without modified closure?

In my ASP.NET Core project, I currently inject an IFilterMetadata dependency into MvcOptions in the ConfigureServices method in the following way: 在我的ASP.NET Core项目中,我目前通过以下方式在ConfigureServices方法中将IFilterMetadata依赖项注入MvcOptions中:

public override IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddProjectSpecificStuff();

    IExceptionFilter exceptionFilter = null;

    services.AddMvc(options => { options.Filters.Add(exceptionFilter); });

    var provider = base.ConfigureServices(services);

    exceptionFilter = provider.GetService<IExceptionFilter>();

    return provider;
}

This works, but causes code analyzers such as ReSharper to complain about access to modified closure. 这可以工作,但是会使诸如ReSharper之类的代码分析器抱怨访问已修改的闭包。

Is there an alternative to achieve the same dependency injection without using modified closure? 是否有替代方法可以在不使用修改的闭包的情况下实现相同的依赖项注入?

When your filters have dependencies, just register them with the generic add method instead of passing an instance. 当过滤器具有依赖项时,只需使用通用add方法注册它们,而不要传递实例。

services.AddMvc(options =>
{
    options.Filters.AddService(typeof(IExceptionFilter));
    // ASP.NET Core 2.0
    //options.Filters.AddService<IExceptionFilter>();
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM