Uma referência de object é necessária para campo, método ou propriedade não estáticos no meu controlador

Duplicar Possível:
Uma referência de object é necessária para o campo, método ou propriedade não estático

Eu tenho um campo não estático:

private IDictionary _mappings = new Dictionary(StringComparer.InvariantCultureIgnoreCase) 

que eu quero usar dentro de uma ação como esta:

 public static string GetMimeType(string extension) { //... return _mappings.TryGetValue(extension, out mime) ? mime : "application/octet-stream"; } 

O compilador está reclamando:

Uma referência de object é necessária para campo, método ou propriedade não estáticos na instrução de retorno.

Como posso referenciar esse campo?

Você não pode acessar membros da instância de membros estáticos, portanto, você tem duas opções.

  1. Torne o método um método de instância (remova a palavra-chave static )
  2. Torne o campo uma estática (adicione a palavra-chave static )

O que você escolher dependerá se o campo deve ser compartilhado entre todas as instâncias ou não.

Eu acho que o compilador é bem claro aqui: Seu método GetMimeType é um método estático, mas a variável _mappings não é declarada estática (um campo / variável não-estático ou de instância).

Se você quiser usar a variável de mapeamento como aparece acima, faça o seguinte:

 private static IDictionary _mappings = new Dictionary(StringComparer.InvariantCultureIgnoreCase) 

Edit: Como o comentarista apontou abaixo, você deve ter cuidado que este é realmente o comportamento desejado. Um membro estático significa que todas as instâncias compartilharão essa mesma variável de mapeamentos e poderão sobrescrever os dados presentes. Se você quiser uma variável de mapeamentos por class, deverá alterar seu método para um método de instância (removendo a palavra-chave estática), conforme observado na resposta acima.

Se você quer apenas um dictionary de valores que é preenchido uma vez e nunca modificado depois disso, uma coisa que você poderia fazer seria tornar o dictionary estático e preenchê-lo em um construtor estático.