下面介绍的是Startup类背后的设计原则:
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.1
我理解这个类需要包括像ConfigureServices或Configure这样的方法。
为什么CreateDefaultBuilder(args).UseStartup<Startup>()不强制使用任何基类或接口以获得更好的可读性?
使用这种设计方法,必须有人阅读文档并了解神奇的方法名称,如ConfigureServices或Configure。
如果这是一个新的类设计思维的一部分,那么我可以在哪里读到更多关于它的内容呢?
发布于 2018-11-12 08:56:32
这样做有几个原因。更明显的原因之一是,因为您可以将服务注入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的环境变量,将选择并执行不同的方法(如果没有找到匹配的环境特定方法,则为默认的Configure/ConfigureServices )。
对于传统的OOP (继承/接口/抽象类),这一切都是不可能的。
这同样适用于ASP.NET核心的其他部分,如中间件和Invoke方法。Invoke方法也可以将依赖项注入其中,但是为了调用下一个中间件,只需执行以下操作
await next?.Invoke();也不必担心下一个中间件所需或可能采用的依赖项。
要完成这个任务,还可以有多个Startup类,它们的默认方法名称(Configure/ConfigureServices)名为StartupDevelopment、StartupProduction、Startup (作为后备),ASP.NET Core将根据环境变量集选择正确的方法名。
发布于 2019-07-31 17:21:48
可以从IStartup接口继承启动类。
// \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实现的模板文件。为什么不-可能是非类型化语言的错误或影响..。
https://stackoverflow.com/questions/53254735
复制相似问题