【发布时间】:2017-07-12 11:06:37
【问题描述】:
假设 WebApi2 控制器有一个 SearchClient,它在启动时配置为 scoped-lifestyle 依赖项。
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方法的好坏? -
static方法在这样的多访问 Web 环境中是否安全或推荐使用? - Web 环境中的
async static方法呢?和async方法有区别吗?
【问题讨论】:
-
当它可以是实例而不需要参数时,为什么要将它设为静态并需要 SearchClient?但是,静态对于由控制器操作更改的属性是不安全的,对于方法或实际上是静态属性(不会更改)则不安全。
-
那个静态方法没有真正的用途。假设
SearchClient不是抽象类,控制器应该依赖于抽象而不是具体化。 -
@CamiloTerevinto // 好吧,有时,Resharper 建议这样做。它允许将方法移动到另一个风险较小的类,这使得重构更容易。
-
Resharper 建议将实例方法(因为它使用实例数据)移动到静态方法?这很奇怪。我同意虽然离开课堂更容易
-
@Youngjae 因此依赖抽象的原因。
标签: c# asp.net-web-api static-methods