web-dev-qa-db-fra.com

Comment configurer StructureMap pour asp.net MVC 5

J'obtiens en dessous de l'erreur. Je l'ai configuré comme asp.net mvc 4.

Aucun constructeur sans paramètre défini pour cet objet. Description: une exception non gérée s'est produite lors de l'exécution de la demande Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.MissingMethodException: aucun constructeur sans paramètre défini pour cet objet.

Enfin trouvé l'exception réelle "Une erreur d'activation s'est produite lors de la tentative d'obtention de l'instance de type HomeController, clé" ""

Une erreur se produit lorsque je vais injecter une classe de service au contrôleur domestique

17
Naveen

Les étapes suivantes ont fonctionné pour moi:

  1. Créer une nouvelle application ASP.NET MVC 5 dans Visual Studio 2013 RTM
  2. Installez le StructureMap.MVC4 NuGet:

    Install-Package StructureMap.MVC4
    
  3. Créez une nouvelle interface:

    public interface IDependency
    {
        string SayHello();
    }
    
  4. Implémentez cette interface:

    public class ConcreteDepenedency: IDependency
    {
        public string SayHello()
        {
            return "Hello World";
        }
    }
    
  5. Faites fonctionner le HomeController avec cette interface:

    public class HomeController : Controller
    {
        private readonly IDependency dependency;
        public HomeController(IDependency dependency)
        {
            this.dependency = dependency;
        }
    
        public ActionResult Index()
        {
            return Content(this.dependency.SayHello());
        }
    }
    
  6. Configurez votre conteneur dans ~/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. Exécutez votre application avec Ctrl+F5

  8. ConcreteDependency est correctement injecté dans HomeController.
40
Darin Dimitrov

J'ai une procédure détaillée montrant comment faire fonctionner cela en utilisant le dernier package StructureMap pour MVC 5 ici: http://ardalis.com/resolving-dependencies-in-asp.net-mvc-5-with -structuremap

Ce n'est pas si différent de ce qui était nécessaire dans ASP.NET MVC 3, que j'ai déjà publié: http://ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC -

Fondamentalement, vous installez simplement le package NuGet correct, modifiez vos contrôleurs pour accepter les dépendances et connectez vos interfaces à vos implémentations dans IoC.cs. Si vous suivez la convention par défaut de StructureMap, vous pouvez faire en sorte que ce câblage se produise automatiquement pour de nombreux types.

10
ssmith

StructureMap (2.6.4.1) est compatible avec ASP.NET MVC 5 et vous n'avez rien à changer après la mise à niveau.

Le processus de mise à niveau, cependant, n'est pas aussi simple que vous ne le pensez.

Voici une liste de toutes les étapes si vous devez suivre.

PS: J'ai suivi le tutoriel de Rick Anderson après la mise à niveau (et il dit que vous devriez le faire avant) mais cela a quand même fonctionné.

J'espère que ça aide.

1
LeftyX