具有不同依赖注入的AspNet核心路由映射

时间:2016-03-16 21:31:10

标签: c# dependency-injection asp.net-core

我目前正在开发一个项目,我想在服务器上使用它来实现两个不同的目的,即测试模式和发布模式。我正在使用AspNet核心和中间件管道来尝试实现这一目标。我想要任何东西" /测试"在网址中做一件事,其他一切都做另一种模式。通常我知道如何解决这些问题,因为AspNet Core中间件允许使用app.Map(" / Test",...)映射到路径,但问题是它们都使用相同的管道,只是不同依赖注入/ IoC容器。从我看来,ConfigureServices方法在Configure方法之前运行,并且没有为每个请求路径配置要使用的服务。所以我只需要一种方法来拥有相同的管道,但不同的请求对IoC容器使用不同的服务。

1 个答案:

答案 0 :(得分:0)

我不建议你这样做,你只是让你的工作更难。

而是使用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

对于不同的网址...在您的生产应用程序中,您将其设置为

"iisExpress": {
  "applicationUrl": "http://example.com/",
  "sslPort": 0
}

和您的测试环境

"iisExpress": {
  "applicationUrl": "http://example.com/Test/",
  "sslPort": 0
}

代码/配置代码段取自ASP.NET Core Docs。或者只使用hosting.json用于不同的环境。

hosting.json

{
  "server": "Microsoft.AspNet.Server.Kestrel",
  "server.urls": "http://example.com/"
}

我认为您还可以拥有多个名为hosting.production.json等的文件。