我有一个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中查找名为“path”的appkey。并将其值与调用者的路径相结合。 TrimStart()确保配置文件都包含前导\或不包含。

有帮助吗?

解决方案

由于您是从一个单独的库引用它,因此您可能必须跳过一堆箍才能访问HttpServerUtitity或引入一些难以模拟的类的耦合。您可能需要考虑使用单个配置类来从Web配置加载属性,这些属性通过构造函数/ setter注入到库中。为了使测试更容易,您可以定义一个可以在单元测试中模拟的接口,并让它实现。配置类可以使用HttpServerUtility获取绝对路径并将其存储在内部以供重用。

其他提示

Server.MapPath(string);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top