2015-09-12 30 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以重用已经创建的控制器(也许是因为我有属性,我不会重新加载)是一个好主意?

相关问题