pattern net mvc from framework first create asp c#-4.0 asp.net-mvc-4 dependency-injection structuremap asp.net-mvc-5

c#-4.0 - net - ef 6 mvc



Cómo configurar StructureMap para asp.net MVC 5 (4)

Me estoy poniendo por debajo del error. Lo configuro de forma similar a asp.net mvc 4.

Ningún constructor sin parámetros definido para este objeto. Descripción: se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Detalles de la excepción: System.MissingMethodException: No se ha definido ningún constructor sin parámetros para este objeto.

Finalmente se encontró la excepción real "Se produjo un error de activación al intentar obtener una instancia del tipo HomeController, clave" ""

Se está produciendo un error cuando voy a inyectar la clase de servicio al controlador de la casa


Gracias por toda la respuesta finalmente encontré el problema. En mi clase de servicio, me refiero a una configuración de aplicación, pero no la definí en el archivo web.config debido a que structuremap no pudo inyectar una instancia de mi clase de servicio.

private readonly string _path = ConfigurationManager.AppSettings["vp"].ToString(CultureInfo.InvariantCulture);


Los siguientes pasos funcionaron para mí:

  1. Cree una nueva aplicación ASP.NET MVC 5 en Visual Studio 2013 RTM
  2. Instala el StructureMap.MVC4 NuGet:

    Install-Package StructureMap.MVC4

  3. Crear una nueva interfaz:

    public interface IDependency { string SayHello(); }

  4. Implementar esta interfaz:

    public class ConcreteDepenedency: IDependency { public string SayHello() { return "Hello World"; } }

  5. Haga que HomeController trabaje con esta interfaz:

    public class HomeController : Controller { private readonly IDependency dependency; public HomeController(IDependency dependency) { this.dependency = dependency; } public ActionResult Index() { return Content(this.dependency.SayHello()); } }

  6. Configure su contenedor en ~/DependencyResolution/Ioc.cs :

    using StructureMap; using WebApplication1.Controllers; namespace WebApplication1.DependencyResolution { public static class IoC { public static IContainer Initialize() { ObjectFactory.Initialize(x => { x.For<IDependency>().Use<ConcreteDepenedency>(); }); return ObjectFactory.Container; } } }

  7. Ejecute su aplicación con Ctrl + F5

  8. La HomeController ConcreteDependency se inyecta correctamente en HomeController .

StructureMap (2.6.4.1) es compatible con ASP.NET MVC 5 y no tiene que cambiar nada después de la actualización.

El proceso de actualización, sin embargo, no es tan sencillo como podría pensar.

Aquí hay una lista de todos los steps si tiene que seguir.

PD: He seguido el tutorial de Rick Anderson después de la actualización (y él dice que debes hacerlo antes), pero funcionó, de todos modos.

Espero eso ayude.


Tengo un tutorial detallado que muestra cómo hacer que funcione con el paquete más reciente de StructureMap para MVC 5 aquí: http://ardalis.com/resolving-dependencies-in-asp.net-mvc-5-with-structuremap

No es tan diferente de lo que era necesario en ASP.NET MVC 3, que publiqué anteriormente: http://ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC-3

Básicamente, simplemente instala el paquete NuGet correcto, modifica sus controladores para aceptar dependencias y conecta sus interfaces a sus implementaciones en IoC.cs. Si sigue la convención predeterminada de StructureMap, puede hacer que este cableado se realice automáticamente para muchos tipos.