C# 具有不同依赖项注入的AspNet核心路由映射
我目前正在从事一个项目,在该项目中,我希望在服务器上用于两个不同的目的:测试模式和发布模式。我正在使用AspNet核心和中间件管道来尝试实现这一点。我希望在url中使用类似于anything“/Test”的方式来做一件事,而其他方式则可以做另一件事。通常我知道如何解决这些问题,因为AspNet核心中间件允许使用app.Map(“/Test”,…)映射到路径,但问题是它们都使用相同的管道,只是不同的依赖注入/IoC容器。从我看到的情况来看,ConfigureServices方法在Configure方法之前运行,并且没有针对要使用的服务的每个请求路径进行配置。因此,我只需要一种方法来实现相同的管道,但不同的请求会为IoC容器使用不同的服务。我不建议您尝试这样做,您只会让您的工作更加困难 而是使用ASP.NET Core提供的:特定于环境的配置。为此,您需要运行两个不同的应用程序,但安装程序仍然可以在同一个项目中,您只需更改环境变量 为此,您首先需要一个带有设置的C# 具有不同依赖项注入的AspNet核心路由映射,c#,dependency-injection,asp.net-core,C#,Dependency Injection,Asp.net Core,我目前正在从事一个项目,在该项目中,我希望在服务器上用于两个不同的目的:测试模式和发布模式。我正在使用AspNet核心和中间件管道来尝试实现这一点。我希望在url中使用类似于anything“/Test”的方式来做一件事,而其他方式则可以做另一件事。通常我知道如何解决这些问题,因为AspNet核心中间件允许使用app.Map(“/Test”,…)映射到路径,但问题是它们都使用相同的管道,只是不同的依赖注入/IoC容器。从我看到的情况来看,ConfigureServices方法在Configure
launchSettings.json
文档中的示例
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:40088/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNET_ENV": "Development"
}
},
"web": {
"commandName": "web",
"environmentVariables": {
"Hosting:Environment": "Staging"
}
}
}
}
此处,环境设置为“暂存”。接下来,您需要为它定义一个配置
using Microsoft.AspNet.Builder;
namespace Environments
{
public class StartupStaging
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}
namespace Environments
{
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}
现在,当您的环境设置为Production
时,将调用Startup
类(如果存在StartupProduction
)。如果您的环境变量设置为Staging
,则将调用StartupStaging
至于不同的URL。。。在生产应用程序中,将其设置为
"iisExpress": {
"applicationUrl": "http://example.com/",
"sslPort": 0
}
以及您的测试环境
"iisExpress": {
"applicationUrl": "http://example.com/Test/",
"sslPort": 0
}
代码/配置片段取自。或者只需为不同的环境使用hosting.json
hosting.json
{
"server": "Microsoft.AspNet.Server.Kestrel",
"server.urls": "http://example.com/"
}
在我看来,你也可以有多个名为hosting.production.json等的文件。我不建议你这样做,你只会让你的工作更难 而是使用ASP.NET Core提供的:特定于环境的配置。为此,您需要运行两个不同的应用程序,但安装程序仍然可以在同一个项目中,您只需更改环境变量 为此,您首先需要一个带有设置的
launchSettings.json
文档中的示例
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:40088/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNET_ENV": "Development"
}
},
"web": {
"commandName": "web",
"environmentVariables": {
"Hosting:Environment": "Staging"
}
}
}
}
此处,环境设置为“暂存”。接下来,您需要为它定义一个配置
using Microsoft.AspNet.Builder;
namespace Environments
{
public class StartupStaging
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}
namespace Environments
{
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseWelcomePage();
}
}
}
现在,当您的环境设置为Production
时,将调用Startup
类(如果存在StartupProduction
)。如果您的环境变量设置为Staging
,则将调用StartupStaging
至于不同的URL。。。在生产应用程序中,将其设置为
"iisExpress": {
"applicationUrl": "http://example.com/",
"sslPort": 0
}
以及您的测试环境
"iisExpress": {
"applicationUrl": "http://example.com/Test/",
"sslPort": 0
}
代码/配置片段取自。或者只需为不同的环境使用hosting.json
hosting.json
{
"server": "Microsoft.AspNet.Server.Kestrel",
"server.urls": "http://example.com/"
}
在我的脑海中,我认为您还可以有多个名为hosting.production.json等的文件。您可能可以为您的
/Test
路由创建第二个服务集合。但是,不确定是否可以为子路径自动注入。您可能可以为您的/Test
路由创建第二个ServiceCollection
。但不确定是否有可能为子路径自动注入。