WebApi2コントローラの起動時にスコープライフスタイルの依存関係に設定されたSearchClient
があるとします。コントローラのASP.NETと静的メソッド
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);
}
}
私たちが見ることができるように、SearchDocuments
方法はstatic
キーワードを持っています。
私の質問は次のとおりです。
static
の方法が良いか悪いかをどのように判断できますか?- このような複数アクセスのWeb環境では、
static
メソッドは安全か推奨ですか? - ウェブ環境で
async static
メソッドはどうなりますか?async
メソッドとは違いますか?
なぜ静的にして、インスタンスになる可能性があり、パラメータが不要な場合にSearchClientが必要なのでしょうか?しかし、メソッドや実際には変更されない静的なプロパティではなく、コントローラのアクションによって変更されるプロパティに対しては、staticは安全ではありません。 –
その静的メソッドは本当の目的を果たしません。分離していない場合、 'SearchClient'が抽象クラスでないと仮定して、コントローラは抽象度に依存し、concretionに依存しません。 – Nkosi
@CamiloTerevinto //まあ、時々、Resharperはそれを作ることを勧めます。また、メソッドを別のクラスに移動することで、リファクタリングを簡単にすることができます。 – Youngjae