All*_* Xu 9 c# design-patterns class-design asp.net-core
这是关于Startup这里解释的课程背后的设计原理:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-2.1
我知道这个类需要包含像ConfigureServices或的方法Configure.
为什么CreateDefaultBuilder(args).UseStartup<Startup>()不强制要求任何基类或接口以提高可读性?
有了这种设计方法,有人必须阅读文档并了解魔术方法名称,如ConfigureServices或Configure.
如果这是新的类设计思维模式的一部分,那么我在哪里可以阅读更多关于它的内容?
Tse*_*eng 10
不确定下注,但有几个原因导致它完成了它的完成方式.
其中一个更明显的原因是,因为您可以将服务注入Configure方法,例如
public void Configure(IAppBuilder app, IMyService myService)
{
myService.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
显然,你不能用接口,抽象类或继承来做到这一点.
它通过约定方法完成的第二个原因是,不仅有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) { }
Run Code Online (Sandbox Code Playgroud)
并且将根据您的环境变量ASPNET_ENVIRONMENT选择并执行不同的方法(Configure/ConfigureServices如果未找到匹配的特定于环境的方法,则为默认值).
传统的OOP(继承/接口/抽象类)都不可能实现这一点.
这同样适用于ASP.NET Core的其他部分,如Middlewares和InvokeMethod.该Invoke方法也可以将依赖注入其中,但为了调用下一个中间件,您只需执行此操作
await next?.Invoke();
Run Code Online (Sandbox Code Playgroud)
并且不必担心下一个中间件需要或可能需要哪些依赖项.
而且是完整的,一个也可以有多个Startup类与默认的方法名(Configure/ ConfigureServices命名)StartupDevelopment,StartupProduction,Startup(作为备用)和ASP.NET睿将搭载基于环境变量设置正确的
| 归档时间: |
|
| 查看次数: |
812 次 |
| 最近记录: |