我想使用扩展Controller的类作为我项目中控制器的默认基类型,而不是使用Controller本身.所以,我会这样做:
public class FooController : MyBaseController
有没有办法可以强制执行此操作,以便人们无法创建直接扩展Controller的控制器?
解决方法
但是我更喜欢单元测试方法
above这里是另一个使用自定义控制器工厂.
public class MyControllerFactory<T> : DefaultControllerFactory where T : Controller { #region Overrides of DefaultControllerFactory protected override IController GetControllerInstance(RequestContext requestContext,Type controllerType) { if (!typeof(T).IsAssignableFrom(controllerType)) { throw new NotSupportedException(); } return base.GetControllerInstance(requestContext,controllerType); } #endregion }
您可以在Global.asax的应用程序启动方法中进行设置,如下所示:
ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory<MyBaseController>());
当然,当不从MyBaseController派生时,这会导致运行时异常,这可能不适合您当前的场景.