2009-09-01 9 views
10

Tengo un proyecto para el que uso StructureMap para la inyección de dependencias. El proyecto compila bien como un proyecto MVC pero después de todo lo que se mueve a un proyecto MVC2 ahora estoy recibiendo el siguiente error:ASP.NET MVC 2 Vista previa 1: compilación de problemas StructureMap Controller Factory

Test.Web.Controllers.StructureMapControllerFactory.GetControllerInstance(System.Type)': no suitable method found to override C:\Test\Web\Controllers\StructureMapControllerFactory.cs 11 40 Test.Web

Aquí es mi StructureMapControllerFactory:

using System; 
using System.Web.Mvc; 
using StructureMap; 

namespace Test.Web.Controllers 
{ 
    public class StructureMapControllerFactory : DefaultControllerFactory 
    { 

     protected override IController GetControllerInstance(Type controllerType)** 
     { 

      IController result = null; 
      try 
      { 
       if (controllerType == null) return base.GetControllerInstance(controllerType); 
       result = ObjectFactory.GetInstance(controllerType) as Controller; 

      } 
      catch (StructureMapException) 
      { 
       System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave()); 
       throw; 
      } 

      return result; 
     } 

    } 
} 

He encontrado un puesto semi relacionado con este problema, pero no ofreció ninguna idea sobre cómo resolver mi problema: MVC 2 preview 1 - methods with parameters in the controller fail to load

Obviamente, me falta un cambio de la progresión 1.0-2.0, pero no estoy seguro de qué cambió. Cualquier ayuda es siempre apreciada.

Respuesta

19

La firma de este método ha cambiado. En la actualidad existe un primer argumento de RequestContext:

protected override IController GetControllerInstance(
    RequestContext requestContext, 
    Type controllerType) 

También tendrá que cambiar su llamada a base.GetControllerInstance:

if (controllerType == null) 
    return base.GetControllerInstance(requestContext, controllerType); 
+0

Muchas gracias Craig. Me pregunto por qué esto no se refleja en el navegador de objetos VS cuando se explora el espacio de nombres System.Web.MVC [2.0.0.0]. –

+1

No estoy seguro, pero puede escribir ov [barra espaciadora] en el editor de código (es decir, empiece a escribir "anular" donde normalmente declararía un nuevo método) para obtener la lista de métodos que se pueden cargar para la clase actual con sus firmas. –

1

tracé con el reflector, y de hecho la firma de la función es cambiado los

protegida virtual interna IController GetControllerInstance (RequestContext RequestContext, Tipo controllerType)

la MVC 2 DLL reside aquí: C: \ Archivos de programa \ Microsoft ASP.NET \ ASP.NET MVC 2 \ Asambleas \ System.Web.Mvc.dll

¡Gracias, resolvió mi problema!

8

Craig Stuntz es muy correcto aquí.

Solo asegúrese de no olvidar hacer referencia a System.Web.Routing además si su DI está en un proyecto diferente al de su aplicación MVC.

Por alguna razón, no había errores que se muestran en el IDE para mí, pero en la compilación todavía obtendría una GetControllerInstance "no se encontró ningún método adecuado para anular".

Una vez corregida la falta de ensamblaje de referencia System.Web.Routing, todo estaba bien ...

+0

¡Gracias !. Todavía no sé por qué, pero agregar una referencia a System.Web.Routing me solucionó esto. –

+0

Gracias por el comentario de System.Web.Routing: me ha ahorrado tiempo de depuración. – Ben

Cuestiones relacionadas