Webプロジェクトで使用されるライブラリで正しい絶対パスを取得する
-
03-07-2019 - |
質問
別のライブラリでいくつかの検索方法を使用するasp.net mvcプロジェクトがあります。 このライブラリは、luceneインデックスファイルの場所を知る必要があります。
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は、完全に間違ったパスを提供します。
-結論-
完全にやりたい場合は、 tvanfosson の答えはおそらくあなたのためです。
ただし、次の方法を使用することで、脳の死をもう少し抑えました。
Path.Combine(AppDomain.CurrentDomain.BaseDirectory,
ConfigurationManager.AppSettings["luceneIndex"].TrimStart('\\'));
これにより、呼び出し側のapp.configで「パス」というappkeyが検索されます。その値を呼び出し元のパスに結合します。 TrimStart()は、構成ファイルに両方とも先頭の\が含まれているかどうかを確認します。
解決
これを別のライブラリから参照しているため、HttpServerUtitityにアクセスするため、またはモックするのが難しいクラスへのカップリングを導入するために、たくさんのフープをジャンプする必要があるかもしれません。コンストラクター/セッターを介してライブラリーにインジェクトされるWeb構成からプロパティーをロードする単一の構成クラスを持つことを検討する必要があります。テストを簡単にするために、ユニットテストでモックできるインターフェイスを定義し、それを実装させることができます。構成クラスは、HttpServerUtilityを使用して絶対パスを取得し、内部的に保存して再利用できます。
他のヒント
Server.MapPath(string);
所属していません StackOverflow