Supposons que le contrôleur WebApi2 dispose d'un SearchClient
configuré dans une dépendance de style de vie au démarrage.ASP.NET et méthode statique dans le contrôleur
public class SearchController : ApiController {
private readonly SearchClient _indexClient;
public SearchController(SearchClient client) {
_indexClient = client; // dependency injected
}
public IEnumerable<string> Get(string keyword){
return SearchDocuments(_indexClient, keyword);
}
public static IEnumerable<string> SearchDocuments(SearchClient indexClient, string text)
{
return indexClient.Search(text);
}
}
Comme on le voit, la méthode SearchDocuments
a static
mot-clé.
Mes questions sont;
- Comment peut-on décider si la méthode
static
est bon ou mauvais? - La méthode
static
est-elle sûre ou recommandée dans un tel environnement Web à accès multiples? - Qu'en est-il de la méthode
async static
dans l'environnement Web? Est-ce différent de la méthodeasync
?
Pourquoi voudriez-vous le rendre statique et exiger un SearchClient quand il pourrait être instance et pas besoin du paramètre? Mais, statique n'est pas sûr pour les propriétés qui sont modifiées par les actions du contrôleur, pas pour les méthodes ou les propriétés réellement statiques (qui ne changent pas). –
Cette méthode statique ne sert à rien. Sur un séparé, le contrôleur ne doit pas dépendre d'abstractions et non de concrétions, en supposant que SearchClient n'est pas une classe abstraite. – Nkosi
@CamiloTerevinto // Eh bien, parfois, Resharper recommande de le faire. Et cela permet de déplacer la méthode vers une autre classe moins risquée ce qui facilite le refactoring. – Youngjae