簡體   English   中英

當Ninject用作依賴項解析器時,如何在asp.net mvc3 App中處理DbContext(或對象)

[英]How to Dispose DbContext(or object) in asp.net mvc3 App when Ninject is used as dependency resolver

對於這個Demo,我創建了一個虛假的Database +存儲庫,如下所示

假Db +存儲庫

 public interface IDemoRepository
    {
        string[] GetUsers();
    }

    public class DemoRepository : IDemoRepository, IDisposable
    {

        public string[] GetUsers()
        {
            string[] Users = { "Robert","Linda","Jack"};
            return Users;
        }

        public void Dispose()
        {
            //do nothing     
            throw new Exception("Disposed is called");       
        }
    }

我的控制器看起來如此

 public class TestController:Controller
    {
        protected IDemoRepository _repository;

        public BaseController(IDemoRepository repository)
        {
            _repository = repository;
        }

        public ActionResult()
       {  
             var users = _repository.GetUsers();
             Return View(users);
       }
    }

Ninject Part

我從NUGet安裝了ninject並在下面添加了用於解析存儲庫的代碼

kernel.Bind<IDemoRepository>().To<DemoRepository>()

Ninject沒有調用DemoRepository.Dispose ,我添加了一個斷點,即使我當前的代碼拋出錯誤但是Ninject沒有調用DemoRepository.Dispose

任何人都能建議我如何處置這個物體。

如果要處理,請確保您的存儲庫綁定到Ninject中的請求范圍:

kernel.Bind<IDemoRepository>().To<DemoRepository>().InRequestScope();

您不需要Dispose() DbContext ,因為它已經正確管理所有連接。 這是ASP.NET MVC提示#34 - 處理您的DataContext(或不要)的引用:

調用DataContext.Dispose()方法的最重要結果是與DataContext關聯的任何打開的連接都將關閉。 這似乎非常重要,但事實並非如此。 它不重要的原因是DataContext類已經管理了它的連接。 默認情況下,DataContext類會自動打開和關閉連接。

...

通常,當您在DataContext對象上調用Dispose()方法時,與DataContext對象關聯的任何數據庫連接都已關閉。 DataContext對象在執行數據庫查詢后立即關閉了數據庫連接。 所以,Dispose()方法實際上沒有任何事情可做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM