为什么ASP.NET Core的Startup类不是接口或抽象类?

问题描述 投票:4回答:1

这是关于qazxsw poi课程背后的设计原则:

Startup

我知道这个类需要包含像https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.1ConfigureServices这样的方法。

为什么Configure不强制要求任何基类或接口以提高可读性?

有了这种设计方法,有人必须阅读文档并了解魔法方法名称,如CreateDefaultBuilder(args).UseStartup<Startup>()ConfigureServices

如果这是新的类设计思维模式的一部分,那么我在哪里可以阅读更多关于它的内容?

c# design-patterns asp.net-core class-design
1个回答
10
投票

有几个原因导致它完成了它的完成方式。其中一个更明显的原因是,因为您可以将服务注入Configure方法,例如

Configure

显然,你不能用接口,抽象类和继承来做到这一点。

它通过常规方法完成的第二个原因是,不仅有public void Configure(IAppBuilder app, IMyService myService) { myService.DoSomething(); } 方法,还有无数个依赖于环境的配置方法。

Configure/ConfigureServices

并且根据public void Configure(IAppBuilder app) { } public void ConfigureDevelopment(IAppBuilder app) { } public void ConfigureProduction(IAppBuilder app) { } public void ConfigureStaging(IAppBuilder app) { } public void ConfigureSomethingElse(IAppBuilder app) { } 的环境变量,将选择并执行不同的方法(如果未找到匹配的环境特定方法,则使用默认的ASPNET_ENVIRONMENT)。

传统的OOP(继承/接口/抽象类)都不可能实现这一点。

这同样适用于ASP.NET Core的其他部分,例如Middlewares和Configure/ConfigureServices Method。 Invoke方法也可以注入依赖项,但为了调用下一个中间件,你只需要做

Invoke

并且不必担心下一个中间件需要或可能需要哪些依赖项。

要完成,还可以使用名为await next?.Invoke(); StartupConfigure(作为后备)的默认方法名称(ConfigureServices / StartupDevelopment)使用多个StartupProduction类,ASP.NET Core将根据环境变量集选择正确的方法名称。


0
投票

启动类可以从IStartup接口继承。

Startup

默认情况下,向导不会创建带有IStartup实现的模板文件。为什么不 - 可能是错误..

© www.soinside.com 2019 - 2024. All rights reserved.