我的MVC4解决方案包含三个项目:
Web的global.asax定义了一些路由,MyAccount(在其PortableAreaRegistration的实现中)也是如此。
在我的nUnit测试中,我需要获得整个解决方案的路由集。我可以使用以下代码获取Web中定义的路由:
if (RouteTable.Routes.Count == 0)
{
RouteRegistrationConfigurator.Configure();
MvcApplication.RegisterRoutes(RouteTable.Routes);
}
当我尝试使用此功能扩展它以包含便携式区域时:
if (RouteTable.Routes.Count == 0)
{
var areaRegistration = new MyAccountAreaRegistration();
var areaRegistrationContext = new AreaRegistrationContext(areaRegistration.AreaName, RouteTable.Routes);
areaRegistration.RegisterArea(areaRegistrationContext);
RouteRegistrationConfigurator.Configure();
MvcApplication.RegisterRoutes(RouteTable.Routes);
}
我收到InvalidOperationException:“由于对象的当前状态,操作无效。”在RegisterArea()
电话。
将此代码放在测试本身或TestFixtureSetUp方法中对错误没有任何影响。
AreaRegistrationContext
构造函数有一个可选的第三个参数object state
。默认情况下,该值为null。给它一个空对象(new {}
或new object {}
)并不能解决错误。我无法找到关于state
对象可以或应该是什么的任何文档。
使用AreaRegistration.RegisterAllAreas()
调用而不是注册特定区域会导致错误消息“InvalidOperationException:在应用程序的启动前初始化阶段无法调用此方法。”
我看到这些区域注册行的示例可用于MVC2项目而没有此错误。关于MVC4的不同之处是如何改变我应该如何设置它?