这花了一些时间,但我想我明白了。
首先由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
位置避免仿制药的疯狂。
如果要从IAppBuilder
到BuildFunc
:
public static BuildFunc UseOwin(this IAppBuilder builder)
{
return middleware => builder.Use(middleware(builder.Properties));
}
为了建立使用BuildFunc
管道,可以在BuildFunc
创建扩展:
public static BuildFunc UseMyFramework(this BuildFunc buildFunc)
{
buildFunc(startupProperties => BuildPipeline(startupProperties));
return buildFunc;
}
这是一个很好的做法返回链接为BuildFunc
。
建设管道无非是MidFunc
小号连在一起并任选与实际AppFunc
结束更多:
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实现连接到你的框架。我用Microsoft.Owin此:
app.UseOwin().UseMyFramework()
也许这可以帮助你:https://visualstudiomagazine.com/articles/2015/05/01/inject-custom-middleware.aspx – Rumpelstinsk
谢谢,但遗憾的是它不”吨。这个例子使用IApplicationBuilder接口,它也不是OWIN的一部分。 – Jeroen