asp.net mvc-4 Webアプリケーションとエンティティフレームワーク5.0で作業しています。 Disposeがアプリケーション内でどのように動作しているのか混乱しています。現在、次の設定があります。 -Dispose()がControllerクラスとRepositoryクラス内でどのように動作するか
- 私は外部API呼び出しを行うためにWebClient()
を使用する複数のメソッドを含むAPIRepositoryクラスを持っています。私はこのクラスの中にDisposeメソッドを定義していません。
public class APIRepository
{
public string AddTicket(string title, string technichian,string account,string site,string description,string mode,string requestor)
{
//code goes here
using (var client = new WebClient())
{
}
return result;
}
//code goes here
}
-I私のデータアクセスロジックが含まれているリポジトリのクラスを持っている、そしてそれは私のDbContext
を開始し、私はこのクラス内のDisposeメソッドを定義します。
public class Repository
{
private MyEntities my = new MyEntities();
//code goes here...
public void Dispose()
{
my.Dispose();
}
-I 2つのリポジトリのクラス開始Controllerクラス、している: - :
に基づいて-
[RequireHttps] public class ServerController : Controller { Repository repository = new Repository(); APIRepository APIrepository = new APIRepository(); //code goes here protected override void Dispose(bool disposing) { if (disposing) { repository.Dispose(); } base.Dispose(disposing); }
は今、私は私の現在のプロジェクトについて、以下の質問を持っていますDisposeの仕組みに関する私の理解は、アクションメソッドがViewを呼び出すと、asp.net mvcは現在のControllerクラス内のDisposeメソッドを自動的に呼び出します。リポジトリ内のDisposeメソッドを呼び出し、データベース接続が閉じられていることを確認します。私の理解は有効ですか?
私の場合、私のAPIRepository()内にDisposeメソッドが必要ですか?私はこのリポジトリにはサードパーティアプリケーションとの統合を呼び出す
WebClient()
コールがあり、アクションに単純な文字列を返します方法。??処分する必要がある操作は何ですか?私のリポジトリクラス内に
my.Dispose();
を呼び出すと、データベース接続が閉じられていることがわかりますが、他の処理が必要ですか?WebClient()
を開始するか、アクションメソッドでJSONを返すなどの方法がありますか?Viewを返す以外のアクションは、Controllerクラス内でDisposeメソッドを呼び出しますか?データベース接続が閉じていることを確認します
私はこのサイトで検索して、あなたの質問に対するすべての回答を見つけることができます。多分、いくつかの質問で分かれています。 –
あなたは 'IDisposable'から継承しているようには見えません – Jonesopolis
@ Jonesopolis ServerControllerクラスはControllerクラスを拡張しました。そしてControllerクラスはIDisposableインターフェイスを実装しています(これらは、新しいControllerクラスを作成するときにasp.net mvc内のボックスから実行されます)。その後、ServerController内部でDisposeメソッドをオーバーライドしています。 「あなたがIDisposableから継承しているとは思われません」ありがとうございました –