私が尋ねる理由は、特定の ORM テクノロジに関連する依存関係をリポジトリに注入する必要なく、リポジトリが透過的にアクセスできるように、コレクションがなどのオブジェクトHttpContext.Current.Items
を配置するのに適しているように思われるためです。これにより、リポジトリは、実際に変更を永続化するという追加の責任を負うか、引き受けるかを決定できます。IDisposable
DataContext
UnitOfWork
例えば:
ページ:
protected void Page_Load(...)
{
Items[KeyValueFromConfigurationFile] = new DataContext();
var repo = new Repository();
var rootEntity = repo.GetById(1);
}
リポジトリ:
public virtual TEntity GetById(int id)
{
var ctx = HttpContext.Current.Items[KeyValueFromConfigurationFile] as DataContext;
return ctx.TEntities.SingleOrDefault(p => p.Id == id);
}
もちろん、null をチェックし、コレクションDataContext
で利用できない場合は取得するために必要な手順を実行します。HttpContext.Current.Items
したがって、上記のコードが与えられた元の質問に戻ります。HttpContext.Current
例外がスローされた場合でも、Items コレクションに含まれるオブジェクトと一緒に破棄されますか?