我试图了解 ASP.NET Core 管道的工作原理。我想使用 StaticFileMiddleware
并传入一些选项。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
var staticFileOptions = new StaticFileOptions();
app.UseMiddleware<Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware>(staticFileOptions);
}
当我运行我的应用程序时,出现以下错误
System.InvalidOperationException: A suitable constructor for type 'Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.
at Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(IServiceProvider provider, Type instanceType, Object[] parameters)
at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.<>c__DisplayClass3_0.<UseMiddleware>b__0(RequestDelegate next)
at Microsoft.AspNetCore.Builder.Internal.ApplicationBuilder.Build()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
我明白我可以使用
app.UseStaticFiles(staticFileOptions);
但是,由于这是一个学习练习,我想换个说法。
最佳答案
这是我解决同一问题的方法。
只需使用您想要传递的属性创建新类:
public class LoggingOption
{
public bool ToLog { get; set; }
}
这是如何初始化
app.UseMiddleware<LoggingMiddleware>(Options.Create(new LoggingOption{ ToLog = true }));
这是构造函数
public LoggingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory, IOptions<LoggingOption> options)
{
_next = next;
_logger = loggerFactory.CreateLogger<LoggingMiddleware>();
_toLog = options.Value.ToLog;
}
关于asp.net-core - 如何 UseMiddleware<Type>(...) 并传入选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876333/