2013-09-30 48 views
4

OWIN AppBuilder「UseStatic」位從本地文件系統傳遞文件,這在某些情況下非常方便,但我希望它可以從應用程序啓動時預填充的內存中的IDictionary傳遞內容。任何人都可以指向一個很好的方向來調查壓倒一切/改變行爲嗎?OWIN改變UseStatic?

謝謝。

+2

我想你可以通過你的自定義實現實現IFileSystem接口實現這一點,將其插入StaticFileOptions.FileSystem財產。注意:靜態文件中間件仍處於預發佈階段。它可能有錯誤。 – Praburaj

+0

爲什麼要更改旨在提供文件以供內存數據使用的系統?看起來很複雜。你爲什麼不寫一個專門爲此設計的中間件。 – meilke

+1

@meilke,我需要在沒有文件系統(例如Azure站點)的環境中託管,因此不能直接使用黃昏。我嘗試着想通過基於接口的方式來使系統具有可訪問的物理磁盤和系統,並且通過運行時配置進行更改。謝謝。 – Snowy

回答

2

你會想要實現自己的IFileSystemIFileInfo類。在CodePlexsrc/Microsoft.Owin.FileSystems/EmbeddedResourceFileSystem.cs下的開發分支中可以看到這樣的一個例子。這是基於this project的社區貢獻。

一旦實施,你會使用它像這樣

public class InMemoryFileSystem : IFileSystem 
{ 
    public InMemoryFileSystem(IDictionary<string, object> files) 
    {} 
} 

var files = LoadFilesIntoDictionary(); 

app.UseStaticFiles(options => { 
    options.WithFileSystem(new InMemoryFileSystem(files)); 
});