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

Yai*_*vet 5 c# owin katana

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

interface IStartup
{
  void Configuration(IAppBuilder app);
}

public class MyStartup : IStartup
{
    public void Configuration(IAppBuilder app)
    {
       ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

public void Start<T>() where T : IStartup
Run Code Online (Sandbox Code Playgroud)

小智 5

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

WebApp.Start<string>(BaseAddress);
Run Code Online (Sandbox Code Playgroud)

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

不是完全哲学化,但我认为这是当今计算的普遍趋势。REST,没有合同,没有保证,你会发现范式在;肥皂出来了。在某些方面这是一件好事,但我不认为这个例子是其中之一。