Pergunta

Eu tenho um projeto MVC asp.net que usa alguns métodos de pesquisa em uma biblioteca separada. Isto precisa da biblioteca para saber a localização de meus arquivos de índice Lucene.

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

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

Isto lê corretamente o meu lucenePath configurado a partir do nó de chave de aplicativo do web.config. Mas como posso obter o caminho completo correto deste caminho relativo? Path.GetFullPath me dá um caminho completamente incorreto.

- Conclusão -
Se você quer ir full-out, tvanfosson 's resposta é provavelmente para você.
Eu, no entanto, manteve-o um pouco mais morte cerebral usando a seguinte:

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

Isto irá olhar no app.config do chamador para uma AppKey chamado "caminho" e combinar o seu valor para o caminho do chamador. O TrimStart () garante que o arquivo de configuração pode tanto conter um líder \ ou não.

Foi útil?

Solução

Uma vez que você está fazendo referência este a partir de uma biblioteca separada, você pode ter que saltar através de um monte de aros para obter acesso ao HttpServerUtitity ou introduzir alguns de acoplamento para as classes que são difíceis de zombar. Você pode querer considerar ter uma única classe de configuração que carrega propriedades da configuração web que será injetado em sua biblioteca via construtor / setter. Para tornar mais fácil para o teste, você pode definir uma interface que poderia ser ridicularizado em seus testes de unidade e tê-lo implementar isso. A classe de configuração poderia usar o HttpServerUtility obter o caminho absoluto e armazená-lo internamente para ser reutilizado.

Outras dicas

Server.MapPath(string);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top