2015-09-12 135 views
0

我是新手在MVC與c#,我想知道爲什麼控制器實例構造函數將被頻繁調用(這意味着不止一次)。許多MVC控制器實例化的相同的控制器

我已經創建了一個基於佈局頁面的典型視圖。在佈局網頁,我打電話一劍道TreeView.I'm也使用AutoFac,我已經根據AutoFac MVC指令添加下面的指令到我的Global.asax:

builder.RegisterControllers(typeof(MvcApplication).Assembly); 

如果我調試,正在使用來自上面的視圖的控制器實例構造函數在Kendo TreeView被處理後立即被調用。我可以理解,如果控制器操作被要求提供Kendo TreeView數據源,但我不理解這個實例構造函數的幾個調用。我認爲已經有一個控制器的實例。

有沒有人知道如果相同的控制器的許多實例構造函數執行是正常的,或者在我的編碼通常有錯誤,例如,我可能不應該將Kendo樹視圖放置在佈局中,也許在部分視圖中?

此致 斯蒂芬

+0

你還沒有顯示你的視圖,但是每當有一個方法發出一個請求時,控制器就被初始化,所以當請求返回視圖時,它將被初始化,並且如果你的'Kendo TreeView數據源'正在對同一個控制器中的方法進行ajax調用。 –

+0

如果樹視圖控件具有根據「AuthorizeAttribute」確定每個節點是否可見/不可見的邏輯,那麼它將爲每個節點創建一個控制器實例,以檢查當前用戶是否有權訪問它。控制器構造函數應該保持輕量級 - 它們應該只包含警戒子句和服務分配。每個用戶請求都會實例化一個新的控制器實例,這樣如果您每次都嘗試構建某些內容,那麼您的應用程序的性能就會很差。 – NightOwl888

回答

0

感謝斯蒂芬和NightOwl888。我將避免現在在控制器的構造方法中創建其他對象的新實例。

一般來說,使用AutoFac並將Controller類註冊爲Singleton以重用已經創建的控制器(也許是因爲我有屬性,我不會重新加載)是一個好主意?

相關問題