2009-03-02 77 views
1

我有一個asp.net mvc項目,它在單獨的庫中使用了一些搜索方法。 這個庫需要知道我的lucene索引文件的位置。在web項目中使用的庫中獲取正確的絕對路徑

private static string lucenePath = ConfigurationManager.AppSettings["lucenePath"]; 

    public static ColorList SearchColors(Query query) { 
     return new ColorList(
      new IndexSearcher(Path.GetFullPath(lucenePath)), 
      query); 
    } 

這從web.config的應用程序鍵節點正確讀取我配置的lucenePath。 但是,我怎樣才能從這個相對路徑得到正確的完整路徑? Path.GetFullPath給了我一個完全不正確的路徑。

--Conclusion--
如果你想要去全了,tvanfosson的答案可能是你。
但是,我保留了它多了幾分腦死亡的使用以下:

Path.Combine(AppDomain.CurrentDomain.BaseDirectory, 
    ConfigurationManager.AppSettings["luceneIndex"].TrimStart('\\')); 

這看起來在調用者的app.config爲所謂的「路徑」的的AppKey並將其值結合起來,來電者的路徑。 TrimStart()確保配置文件都可以包含前導\或不包含。

回答

0

因爲你是從一個單獨的庫引用這一點,你可能需要通過一堆箍跳得到訪問HttpServerUtitity或引進一些耦合難以嘲笑類。您可能需要考慮讓一個配置類從Web配置中加載屬性,該配置通過構造函數/設置器注入庫中。爲了使測試更容易,您可以定義一個可以在單元測試中模擬的接口,並讓它實現它。配置類可以使用HttpServerUtility獲取絕對路徑並將其存儲在內部以供重用。

1
Server.MapPath(string); 
+0

該庫應該可以從網站中使用,也可以從任何其他應用程序中使用。它應該只是採用當前運行路徑,應用相對路徑並返回結果。 – 2009-03-02 13:07:22

+0

嗯..也許東西從http://stackoverflow.com/questions/362790/what-is-the-best-way-to-determine-application-root-directory將幫助 – abatishchev 2009-03-02 13:14:06