其他分享
首页 > 其他分享> > 为什么OWIN中间件没有实现为某些接口或抽象类?

为什么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上的部分

标签:owin,c
来源: https://codeday.me/bug/20191028/1949607.html