为什么所需的Startup类会';不需要实现适当的接口,如IStartup

本文关键字:实现 接口 IStartup 不需要 Startup 类会 为什么 | 更新日期: 2023-09-27 18:26:33

使用卡塔纳,为什么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

为什么所需的Startup类会';不需要实现适当的接口,如IStartup

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

WebApp.Start<string>(BaseAddress);

这编译良好,但在运行时引发EntryPointNotFoundException(在类"System.String"中找不到"Configuration"方法)。

不完全是哲学性的,但我认为这是当今计算的一个普遍趋势。REST,没有契约,没有保证,你会发现它的范式是存在的;SOAP已过时。从某些方面来说,这是一件好事,但我不认为这个例子是其中之一。