title: Why OWIN middleware is not implemented as some interface or abstraction class?
body: <p>I cannot figure out why first parameter in method <code>IAppBuilder Use(object middleware, params object[] args);</code> of <code>IAppBuilder</code> interface does not require implementation of some interface, but simple object ?! <br/>I expected something like this</p>
  
  <pre><code>public interface IMiddleWare
  {
      public void Invoke(IOwinContext context)
  }
  </code></pre>
  
  <p>and </p>
  
  <pre><code>IAppBuilder Use(IMiddleware middleware, params object[] args);
  </code></pre>
  
  <p>Eventually this middleware has to be executed at some point, so what and how can be called if it is just object ??!! <br/>
  Also if middleware was some interface the following code would not be possible</p>
  
  <pre><code>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());
      }
  }
  </code></pre>
  
  <p>But now this code is compiled successfully but generates runtime error <code>The type 'OwinEducation.SomeStupidMiddleWare' does not match any known middleware pattern</code>
  <br/>
  <br/></p>