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

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

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

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

 public void Start() where T : IStartup 

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

 WebApp.Start(BaseAddress); 

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

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