9

Ich folgte die Anweisungen hier den webApi.HelpPage Bereich und Blick auf ein vorhandenes Projekt hinzuzufügen, die StructureMap verwendet - aber beim Zugriff auf die/Hilfe url:StructureMap Ausnahme nach dem WebApi.HelpPage zu einem WebAPI Projekt hinzufügen

StructureMap Exception Code: 202 No Default Instance defined for PluginFamily System.Web.Http.HttpRouteCollection, System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 

So fehle ich etwas auf dem StructureMap configure:

ObjectFactory.Configure(x => x.Scan(scan => 
      { 
       scan.TheCallingAssembly(); 
       scan.AssembliesFromApplicationBaseDirectory(); 
       scan.AddAllTypesOf<IHttpModule>(); 
       scan.WithDefaultConventions(); 
      })); 

Kann einen StructureMap Neuling in der richtigen Richtung jemand zeigen?

+0

Dieser Fehler wurde gemeldet Devs auch auf GitHub stuctureMap - hoepfully werden sie mit fix aktualisieren: https: // github.com/webadvanced/Structemap.MVC4/issues/6 – nathfy

Antwort

8

In StructureMap 3.x ich folgendes in meiner Kanzlei, mit Erfolg:

For<HelpController>().Use(ctx => new HelpController()); 
+0

vielen Dank dafür - wir sind jetzt dazu übergegangen, http://swagger.io/ für die Dokumentation und das Testen von APIs zu verwenden - aber hoffe, dies hilft anderen – nathfy

+0

Danke, Als Anfänger mit StructureMap hat mir dein Beitrag sehr geholfen –

4

Stellen Sie sicher, dass System.Web. * - Baugruppen von Ihrem Assembly-Scanner übersprungen werden.

ObjectFactory.Configure(x => x.Scan(scan => 
    { 
     scan.TheCallingAssembly(); 
     scan.AssembliesFromApplicationBaseDirectory(assembly => !assembly.FullName.StartsWith("System.Web")); 
     scan.AddAllTypesOf<IHttpModule>(); 
     scan.WithDefaultConventions(); 
    })); 

Es ist ein Fehler und wir beide kommentiert den Github von StructureMap. Ich hoffe, dass wir das in Zukunft nicht brauchen werden, aber im Moment ist es ein Quickfix.

+0

Das funktionierte wie ein Zauber. Der einzige Vorschlag, den ich hätte, ist, die ausgeschlossenen Assemblys in einem separaten Aufruf zu trennen (falls Sie viele Assemblys ausgeschlossen haben), d. H. - scan.ExcludeNamespace ("System.Web"); – mirezus

+0

Das funktioniert bei mir überhaupt nicht. Ich brauche den Vorschlag von seeking27. – Echiban

+1

Bitte beachten Sie, dass dies für eine MVC 4 Web-App mit grundlegenden Assemblynamen war. Wenn Sie etwas anderes verwenden (MVC 5 oder MVC 6), können Sie variieren. –

6

Ich hatte auch das gleiche Problem. Was ich gefunden habe, war, dass der HelpController zwei Konstruktoren enthält. Eine, die eine HttpConfiguration übernimmt, und eine, die eine GlobalConfiguration übernimmt. Ich habe StructureMap gezwungen, den GlobalConfiguration-Konstruktor aufzurufen, indem ich den Http-Konstruktor privat mache.

public HelpController() 
     : this(GlobalConfiguration.Configuration) 
    { 
    } 

    private HelpController(HttpConfiguration config) 
    { 
     Configuration = config; 
    } 

Das schien den Trick zu tun.

Verwandte Themen