为什么所需的Startup类不需要实现适当的接口,比如IStartup?

时间:2014-10-14 19:29:03

标签: c# owin katana

使用katana,为什么 Startup 类不应该实现相应的接口,例如:

interface IStartup
{
  void Configuration(IAppBuilder app);
}

public class MyStartup : IStartup
{
    public void Configuration(IAppBuilder app)
    {
       ...
    }
}

我认为开发人员可以更直观地了解他们应该为WebApp.Start<T>方法提供什么作为T参数而不是猜测和寻找示例,它应该更明确:

public void Start<T>() where T : IStartup

1 个答案:

答案 0 :(得分:4)

原因是“没有好的理由”。存在接口以将结构和目的传达给实现者(抽象类也这样做,同时提供一些最小的行为)。没有他们,我们就会有惯例。在这种情况下,通过不限制TStartup,OWIN允许您使用任何无意义的Startup类,并且只能在运行时告诉您它是否可行。例如:

WebApp.Start<string>(BaseAddress);

这编译很好但在运行时抛出了一个EntryPointNotFoundException(在类'System.String中找不到''配置'方法。)

不是为了获得所有哲学,但我认为这是今天计算的一般趋势。 REST,没有合同,没有保证,你可以理解它的范式; SOAP已经淘汰了。在某些方面,这是一件好事,但我不认为这个例子就是其中之一。