これに対処する最善の方法は、依存性注入(制御の反転またはIOCとも呼ばれます)とカスタムIControllerFactoryを使用して、リポジトリが自動的に作成および破棄されるようにすることです。これを行う方法を説明する記事は次のとおりです。
ASP.NET MVCでの依存性注入:コントローラー
MVC3の場合、代わりにIDependencyResolverの使用を推奨する記事がいくつかありますが、そのインターフェイスにはReleaseコールバックがなく、メモリリークが発生するため(使用するIOCコンテナによって異なります)、注意が必要です。
依存性注入を初めて使用する場合は、その背後にあるアイデアに関するいくつかの記事をWebで検索してください。
IOCの使用に切り替えたくない場合は、OnActionExecutedメソッドをオーバーライドし、すべてのIDisposableを破棄するベースコントローラーを使用できます。例えば:
abstract class DisposingController : Controller
{
protected IList<IDisposable> Disposables;
protected DisposingController()
{
Disposables = new List<IDisposable>();
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
foreach (var disposable in Disposables)
{
disposable.Dispose();
}
base.OnActionExecuted(filterContext);
}
}
次に、コントローラーで:
var myRepository = new MyRepository();
Disposables.Add(myRepository);