2

我的 MVC4 解决方案包含三个项目:

  1. Web,一个 MVC 4 Web 应用程序
  2. MyAccount,一个便携式区域
  3. 测试,一个利用 nUnit(和 moq)的类库

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. 默认情况下,它为空。给它一个空对象(new {}new object {})并不能解决错误。我无法找到任何关于该state对象可以或应该是什么的文档。

使用AreaRegistration.RegisterAllAreas()调用而不是注册特定区域会导致错误消息“InvalidOperationException:在应用程序的预启动初始化阶段无法调用此方法。”

我看到这些区域注册行的示例在 MVC2 项目中可用而没有此错误。MVC4 有什么不同之处会改变我应该如何设置它吗?

4

0 回答 0