2016-07-08 63 views
0

在我的團隊中,我們正在將ASP.NET Core RC1 Web應用程序遷移到RTM。有一個自定義中間件在內部創建StaticFileMiddleware的實例。在RC1它曾經是:Asp.Net核心RTM StaticFileMiddleware:如何通過IOptions <StaticFileOptions>?

// ctor signature: 
StaticFileMiddleware(RequestDelegate next, IHostingEnvironment hostingEnv, 
    StaticFileOptions options, // <-- 
    ILoggerFactory loggerFactory); 

,我們可以輕鬆地創建和傳遞的StaticFileOptions一個實例。現在,在RTM是:

// ctor signature: 
StaticFileMiddleware(RequestDelegate next, IHostingEnvironment hostingEnv, 
    IOptions<StaticFileOptions> options, // <-- 
    ILoggerFactory loggerFactory); 

,我對如何創建IOptions<StaticFileOptions>不知道。其實我不知道如何創建一個一般IOptions<T>,圍繞具有T實例。

Latest reference文檔頁面,還沒有在上面谷歌的結果,不提供任何暗示。 StaticFileMiddleware上的搜索結果一般都很少。

任何人都知道如何進行?實際上,這阻礙了我們向移民邁進。 TA

+0

看看'options pattern' docs https://docs.asp.net/en/latest/fundamentals/configuration.html#using-options-and-configuration-objects –

+0

感謝您的評論。我意識到這一點,我們已經'配置'選項從建立'IConfiguration'設置的部分,然後注入'IOptions '在其他部分。在當前場景中,我們在某個方法內部創建一個'StaticFileOptions',具體取決於運行時的邏輯和值,同樣的方法我們需要將其傳遞給中間件c'tor。那麼現在我們應該把它分成兩部分,一部分是我們用DI創建和註冊選項實例,另一部分是我們注入並使用該實例的部分? – superjos

+2

爲什麼你不使用這樣的東西? 'services.Configure (options => { //您的邏輯 options.DefaultContentType =「」; //設置其他選項 });'對於您的情況不夠嗎? –

回答

1

它看起來像靜態OptionsMicrosoft.Extensions.Options命名空間提供了一個IOptions<TOptions> Create<TOptions>(TOptions options)靜態工廠方法。還沒有運行,但至少它沒有失敗的構建。

順便說一句,在Asp.Net Core Options github issues和PRs上,有關於這種使用模式的討論大約在2月/ 3月(2016年)左右進行。僅舉幾例:Is#122PR#757PR#719PR#124Issue #105帶領我(希望)正確的方向。