2016-11-29 7 views
0

私はASP.NET Coreパイプラインの仕組みを理解しようとしています。 StaticFileMiddlewareを使用して、いくつかのオプションを渡したいと思います。ミドルウェア<Type>(...)を使用してオプションを渡すにはどうすればよいですか?

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); 

を使用しますが、できることを理解してそれを他の方法で呼んでください。

答えて

0

代わりの

app.UseMiddleware<Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware>(staticFileOptions); 

使用

app.UseMiddleware<Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware>(Microsoft.Extensions.Options.Options.Create(staticFileOptions)); 

(または使用としてMicrosoft.Extensions.OptionsスティックとOptions.Createを呼び出す)

これはUseStaticFilesはactual code

0

に実装される方法でありますあなたのことによるとror

System.InvalidOperationException: 'Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware'タイプの適切なコンストラクタを見つけることができませんでした。 タイプが具体的であり、のサービスにはのサービスが登録されています。すべてのパラメータは公共のコンストラクタです。

パブリックコンストラクタを追加したり、コンストラクタこれは、同じ問題に私のアプローチである民間

0

です。

ちょうどあなたが渡したいプロパティを持つ新しいクラスを作成します。

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; 
     } 
です
関連する問題