为什么在 ASP.NET 核心应用程序中使用 "app.Add*()" 和 "app.Use*()" 命名约定?
Why is "app.Add*()" and "app.Use*()" naming convention used in ASP.NET Core application?
在 ASP.NET Core 中,当配置服务时,我注意到它通常是由具有前缀 Add*
的扩展方法完成的。
同样,在配置中间件管道时,我们有带有 Use*
前缀的扩展方法。
例如添加身份验证服务时:
services.AddAuthentication("MyAuthService")
然后我们在管道中添加 Authentication middleware
(这将使用我们刚刚在上面添加的 Authentication services
),如下所示:
app.UseAuthentication();
所以我有几个问题:
- 这个命名约定背后的逻辑是什么?它来自哪里?
- 当我看到这段代码时,我应该如何在脑海中阅读它?
- 为什么在向管道添加中间件时不使用
Add
而不是 Use
?我们还使用 Add
前缀不是更合乎逻辑吗,因为我们也在向管道 添加 中间件? (至少对我来说,这比 Use middleware
更有意义)。
我注意到 NodeJs Express 网络应用程序中使用了类似的约定,但我对 Express 不是很熟悉。 ASP.NET Core 是受其启发还是相反?
此约定是否也用于其他 Web 服务器框架(例如 python、java、php、ruby on rails 等。 )?
我们采取的行动分别由术语添加和使用描述:
术语“添加”是指向应用程序添加服务的行为,但这并不意味着它们将被使用 - “添加”表示一项操作 没有任何直接后果 。
术语“使用”是指在您的应用程序中实际使用它们的行为(因为它们已经被添加)- “使用”一词意味着具有后果的行为。
您的身份验证示例清楚地显示了上述逻辑:
AddAuthentication - 注册身份验证服务所需的服务(除非您在应用程序管道中实际使用这些注册服务,否则身份验证过程不会发生)
UseAuthentication - 将 AuthenticationMiddleware 添加到指定的 IApplicationBuilder,启用 身份验证功能。
在 ASP.NET Core 中,当配置服务时,我注意到它通常是由具有前缀 Add*
的扩展方法完成的。
同样,在配置中间件管道时,我们有带有 Use*
前缀的扩展方法。
例如添加身份验证服务时:
services.AddAuthentication("MyAuthService")
然后我们在管道中添加 Authentication middleware
(这将使用我们刚刚在上面添加的 Authentication services
),如下所示:
app.UseAuthentication();
所以我有几个问题:
- 这个命名约定背后的逻辑是什么?它来自哪里?
- 当我看到这段代码时,我应该如何在脑海中阅读它?
- 为什么在向管道添加中间件时不使用
Add
而不是Use
?我们还使用Add
前缀不是更合乎逻辑吗,因为我们也在向管道 添加 中间件? (至少对我来说,这比Use middleware
更有意义)。
我注意到 NodeJs Express 网络应用程序中使用了类似的约定,但我对 Express 不是很熟悉。 ASP.NET Core 是受其启发还是相反?
此约定是否也用于其他 Web 服务器框架(例如 python、java、php、ruby on rails 等。 )?
我们采取的行动分别由术语添加和使用描述:
术语“添加”是指向应用程序添加服务的行为,但这并不意味着它们将被使用 - “添加”表示一项操作 没有任何直接后果 。
术语“使用”是指在您的应用程序中实际使用它们的行为(因为它们已经被添加)- “使用”一词意味着具有后果的行为。
您的身份验证示例清楚地显示了上述逻辑:
AddAuthentication - 注册身份验证服务所需的服务(除非您在应用程序管道中实际使用这些注册服务,否则身份验证过程不会发生)
UseAuthentication - 将 AuthenticationMiddleware 添加到指定的 IApplicationBuilder,启用 身份验证功能。