在我的asp.net應用程序,我有以下靜態類來處理查詢字符串在我的應用程序的一些類具有依賴性:什麼是使我的靜態類可測試的最佳方法?
public static class QueryStringUtil
{
public static int? GetStoreId()
{
return GetId(QueryStrings.StoreId);
}
public static string GetItemCode()
{
return Get(QueryStrings.ItemCode);
}
private static string Get(string queryStringName)
{
return HttpContext.Current.Request.QueryString[queryStringName];
}
private static int? GetId(string queryStringName)
{
var queryString = Get(queryStringName);
int queryStringParsed;
return int.TryParse(queryString, out queryStringParsed) ? (int?)queryStringParsed : null;
}
}
會是什麼使這個類可測試的最好方法?
我知道的一種方法是重構這個並創建一個單例實例類,而不是它的接口,並使相關類接受我的單例類的接口。不知道這將是我最好的選擇。
另一種選擇是讓我的類成爲一個具有接口的普通類,然後創建一個單例ServiceLocator類,負責將實例保存到所有應該像單例一樣行爲的類,比如我的QueryStringUtil,然後允許我的依賴類接受接口到我的IQueryStringUtil。
我能想到的第三個選擇是不使用我的Custom Service Locator類而是使用IoC容器(例如Microsoft Unity),然後在IoC容器配置文件中保存一個單例實例並將其注入到依賴類中。
請告訴你最好的選擇,爲什麼。
非常感謝,
謝謝;哪個IoC容器會推薦最佳性能? –
看這裏 - http://stackoverflow.com/questions/21288/which-net-dependency-injection-frameworks-are-worth-looking-into –