與大多數人一樣,我一直在關注Entity Framework的某些細節。其中一件事是上下文的生命週期。我正在使用一個存儲庫,並決定一個上下文將在請求的長度內生存。所以上下文需要從網絡層注入,無論使用哪個版本庫。重構的成熟 - .NET依賴注入
我寫了一些我肯定可以重構的代碼(其實絕對是!)。因此,基於上述概念,您將如何優化以下存儲庫幫助程序?
public class RepositoryHelper
{
public static CountryRepository GetCountryRepository() {
return new CountryRepository(HttpContext.Current.GetObjectContext());
}
public static CurrencyRepository GetCurrencyRepository()
{
return new CurrencyRepository(HttpContext.Current.GetObjectContext());
}
public static SettingRepository GetSettingRepository()
{
return new SettingRepository(HttpContext.Current.GetObjectContext());
}
}
庫是非常簡單,看起來像
public class CountryRepository
{
private Context _context = null;
public CountryRepository(Context context)
{
_context = context;
}
public Country GetById(int id)
{
// Would return a country
}
public IEnumerable<Country> All()
{
// Would return a list of countries
}
}
+1,很好的建議 – smartcaveman 2011-06-09 11:59:09
謝謝拉撒路。爲了清楚起見,我已經讚賞示例回購(如果我的示例不完整)。我認爲存儲庫模式正在正確地用於數據訪問,並與解決方案中的Web域分離。您的第三段是我最感興趣的內容 - 即我的web層如何與這些存儲庫進行交互,而無需編寫一個爲每個存儲庫類型注入上下文的啞助手。 – Maleks 2011-06-09 12:38:34
@Maleks:我使用DI容器(Castle Windsor)在存儲庫實例化時實例化上下文(當活動控制器需要時,它本身通過DI容器實例化)。您的存儲庫應該都基於您的Web應用程序與之交互的聚合根實體,超出此範圍的範圍才能深入瞭解。將存儲庫的具體實現與數據訪問層更緊密地耦合是很好的,這實際上是不可避免的,但存儲庫耦合的應用應該是鬆散的。 – Lazarus 2011-06-10 10:46:53