使用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
答案 0 :(得分:4)
原因是“没有好的理由”。存在接口以将结构和目的传达给实现者(抽象类也这样做,同时提供一些最小的行为)。没有他们,我们就会有惯例。在这种情况下,通过不限制TStartup,OWIN允许您使用任何无意义的Startup类,并且只能在运行时告诉您它是否可行。例如:
WebApp.Start<string>(BaseAddress);
这编译很好但在运行时抛出了一个EntryPointNotFoundException(在类'System.String中找不到''配置'方法。)
不是为了获得所有哲学,但我认为这是今天计算的一般趋势。 REST,没有合同,没有保证,你可以理解它的范式; SOAP已经淘汰了。在某些方面,这是一件好事,但我不认为这个例子就是其中之一。