首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ASP.NET核心的启动类不是接口或抽象类?

为什么ASP.NET核心的启动类不是接口或抽象类?
EN

Stack Overflow用户
提问于 2018-11-12 00:49:45
回答 2查看 4.5K关注 0票数 39

下面介绍的是Startup类背后的设计原则:

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.1

我理解这个类需要包括像ConfigureServicesConfigure这样的方法。

为什么CreateDefaultBuilder(args).UseStartup<Startup>()不强制使用任何基类或接口以获得更好的可读性?

使用这种设计方法,必须有人阅读文档并了解神奇的方法名称,如ConfigureServicesConfigure

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-12 08:56:32

这样做有几个原因。更明显的原因之一是,因为您可以将服务注入Configure方法,例如

代码语言:javascript
复制
public void Configure(IAppBuilder app, IMyService myService)
{
    myService.DoSomething();
}

显然,您不能通过接口、抽象类或继承来实现这一点。

第二个原因是,不仅有Configure/ConfigureServices方法,还有无数与环境相关的配置方法。

代码语言:javascript
复制
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的环境变量,将选择并执行不同的方法(如果没有找到匹配的环境特定方法,则为默认的Configure/ConfigureServices )。

对于传统的OOP (继承/接口/抽象类),这一切都是不可能的。

这同样适用于ASP.NET核心的其他部分,如中间件和Invoke方法。Invoke方法也可以将依赖项注入其中,但是为了调用下一个中间件,只需执行以下操作

代码语言:javascript
复制
await next?.Invoke();

也不必担心下一个中间件所需或可能采用的依赖项。

要完成这个任务,还可以有多个Startup类,它们的默认方法名称(Configure/ConfigureServices)名为StartupDevelopmentStartupProductionStartup (作为后备),ASP.NET Core将根据环境变量集选择正确的方法名。

票数 29
EN

Stack Overflow用户

发布于 2019-07-31 17:21:48

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

代码语言:javascript
复制
// \packages\microsoft.aspnetcore.hosting.abstractions\2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll
namespace Microsoft.AspNetCore.Hosting
{
 public interface IStartup
  {
   IServiceProvider ConfigureServices(IServiceCollection services);
   void Configure(IApplicationBuilder app);
  }
}

默认情况下,向导不会创建带有IStartup实现的模板文件。为什么不-可能是非类型化语言的错误或影响..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53254735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档