2016-03-16 84 views
1

我目前正在一個項目中,我想在服務器上使用兩種不同的目的,測試模式和發佈模式。我正在使用AspNet核心和中間件管道來嘗試完成此操作。我希望沿着url中的任何「/ Test」行來做一件事和其他事情來做其他模式。通常我知道如何解決這些問題,因爲AspNet Core中間件允許使用app.Map(「/ Test」,...)映射到路徑,但問題在於它們都使用相同的管道,只是不同的依賴注入/ IoC容器。從我看到ConfigureServices方法在Configure方法之前運行,並且沒有爲每個請求路徑配置要使用的服務。所以我只需要一種方法來獲得相同的管道,但不同的請求對IoC容器使用不同的服務。AspNet核心路由映射與不同的依賴注入

+0

你也許可以爲您創造'/ Test'航線第二'ServiceCollection'。不知道是否可以自動注入子路徑。 – poke

回答

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