時間がかかりましたが、わかりました。
Owinで指定されたように、まず定義:
public delegate Task AppFunc(IDictionary<string, object> environment);
public delegate AppFunc MidFunc(AppFunc next);
public delegate MidFunc MidFactory(IDictionary<string, object> startupProperties);
public delegate void BuildFunc(MidFactory midFactory);
私はジェネリックの狂気を避けるために、ここでdelegate
を使用しています。 BuildFunc
を使用してパイプラインを構築するために
public static BuildFunc UseOwin(this IAppBuilder builder)
{
return middleware => builder.Use(middleware(builder.Properties));
}
、あなたがBuildFunc
の拡張機能を作成することができます:BuildFunc
にIAppBuilder
から行くために
public static BuildFunc UseMyFramework(this BuildFunc buildFunc)
{
buildFunc(startupProperties => BuildPipeline(startupProperties));
return buildFunc;
}
返すことをお勧めしチェーンのためにBuildFunc
。
public static MidFunc BuildPipeline(IDictionary<string, object> startupProperties)
{
return next => LogMiddleware(AuthenticateMiddleware(MyApplication));
// Or this if you don't supply your own AppFunc
return next => LogMiddleware(AuthenticateMiddleware(next));
}
public static AppFunc LogMiddleware(AppFunc next)
{
AppFunc middleware = async environment =>
{
// Log request
await next(environment);
};
return middleware;
}
public static AppFunc AuthenticateMiddleware(AppFunc next)
{
AppFunc middleware = async environment =>
{
// authenticate request
await next(environment);
};
return middleware;
}
public static async Task MyApplication(IDictionary<string, object> environment)
{
await Task.CompletedTask;
}
あなたはまだあなたのフレームワークにOwin実装を接続する必要があります:パイプラインを構築
は、実際のAppFunc
で終わる一緒にし、必要に応じてMidFunc
Sをリンク以外の何ものでもありません。私はこのためにMicrosoft.Owinを使用します。
app.UseOwin().UseMyFramework()
多分これはあなたを助け:https://visualstudiomagazine.com/articles/2015/05/01/inject-custom-middleware.aspx – Rumpelstinsk
おかげで、残念ながらそれはdoesnのt。この例では、OWINの一部ではないIApplicationBuilderインターフェイスも使用しています。 – Jeroen