Frage

Ich habe ein asp.net MVC-Projekt, das einige Suchverfahren in einer separaten Bibliothek verwendet. Diese Bibliothek muss die Position meiner lucene Indexdateien kennen.

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

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

Das richtig liest meine konfiguriert lucenePath aus dem Anwendungsschlüssel Knoten web.config. Aber wie kann ich den richtigen vollständigen Pfad von diesem relativen Pfad? Path.GetFullPath gibt mir einen völlig falschen Pfad.

- Fazit -
Wenn Sie voll-out, tvanfosson 's Antwort ist für Sie wahrscheinlich.
Ich aber hielt es ein wenig mehr hirntot unter Verwendung der folgenden:

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

Dies wird sich in app.config dem Anrufer für einen appkey „Pfad“ genannt, und dessen Wert auf die Anrufer-Pfad verbinden. Die TrimStart () stellt sicher, dass die Konfigurationsdatei kann beide enthalten ein führender \ oder nicht.

War es hilfreich?

Lösung

Da Sie dies aus einer separaten Bibliothek verweisen, könnten Sie durch ein Bündel von Reifen springen müssen, um Zugang zum HttpServerUtitity zu bekommen oder eine Kopplung an Klassen einzuführen, die schwer zu verspotten. Sie könnten in Erwägung ziehen, eine einzige Konfigurationsklasse aufweisen, die Eigenschaften aus der Web-Konfiguration lädt, die in der Bibliothek über Konstruktor / Setter injiziert werden. Um es einfacher gegen zu testen, können Sie eine Schnittstelle definieren, die in Ihren Unit-Tests verspottet werden könnte und hat, dass implementieren. Die Konfigurationsklasse die HttpServerUtility verwenden könnte den absoluten Pfad zu erhalten und speichern sie intern weiterverwendet werden.

Andere Tipps

Server.MapPath(string);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top