为什么OWIN中间件没有实现为某些接口或抽象类?
作者:互联网
我不能弄清楚为什么方法IAppBuilder中的第一个参数要使用(对象中间件,params object [] args); IAppBuilder接口的实现不需要某些接口的实现,而是简单的对象?我期待这样的事情
public interface IMiddleWare
{
public void Invoke(IOwinContext context)
}
和
IAppBuilder Use(IMiddleware middleware, params object[] args);
最终,该中间件必须在某个时刻执行,因此,如果仅仅是对象,该如何调用?
另外,如果中间件是某个接口,则以下代码将无法实现
public class SomeStupidMiddleWare
{
public void SomeMethod1()
{
Console.WriteLine("method1");
}
public void SomeMethod2()
{
Console.WriteLine("method2");
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
app.Use(new SomeStupidMiddleWare());
}
}
但是现在此代码已成功编译,但是会生成运行时错误类型“ OwinEducation.SomeStupidMiddleWare”与任何已知的中间件模式都不匹配
解决方法:
Microsoft提供了OwinMiddleware类,用于通过实现OWIN服务器(Katana)来轻松实现自定义中间件,但是OWIN并不是Microsoft唯一的技术.通过将中间件用作对象,Katana可以使用不继承自OwinMiddleware的非Katana中间件.
This blog post更详细地讨论了中间件签名和实现.信息中最重要的一点是,唯一的要求是进行签名匹配
Func<IDictionary<string, object>, Task
您还可以签出OWIN site,特别是Application Delegates上的部分