9

Ho seguito le istruzioni qui per aggiungere l'area webApi.HelpPage e una vista a un progetto esistente, che usa StructureMap - ma quando si accede l'url/Aiuto:Eccezione StructureMap dopo l'aggiunta del WebApi.HelpPage ad un progetto WebAPI

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 

Così mi manca qualcosa sul configure StructureMap:

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

qualcuno può puntare un novizio StructureMap nella direzione giusta?

+0

Questo bug è stato segnalato per stuctureMap sviluppatori troppo su github - hoepfully si aggiornerà con la correzione: https: // github.com/webadvanced/Structuremap.MVC4/issues/6 – nathfy

risposta

8

In 3.x StructureMap ho usato il seguente nel mio Registro di sistema, con il successo:

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

grazie per questo - ci siamo spostati a utilizzare http://swagger.io/ ora per documentazione e test di api - ma spero che questo aiuti gli altri – nathfy

+0

Grazie, essendo un principiante con StructureMap, il tuo post mi ha aiutato molto –

4

Assicurarsi di saltare System.Web. * Assembly dallo scanner di assemblaggio.

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

Si tratta di un bug e entrambi abbiamo commentato il Github di StructureMap. Spero di non averne bisogno in futuro, ma per ora è un quickfix.

+0

Questo ha funzionato come un fascino. L'unico suggerimento che vorrei è quello di separare gli assembly esclusi in una chiamata separata (nel caso in cui siano stati esclusi molti assembly), ad esempio - scan.ExcludeNamespace ("System.Web"); – mirezus

+0

Questo non funziona affatto per me. Devo usare il suggerimento di seek27. – Echiban

+1

Si noti che questo era per un'app Web MVC 4 con nomi di assembly di base. Se stai usando qualcosa di diverso (MVC 5 o MVC 6), la tua produzione può variare. –

6

Ho anche avuto lo stesso problema. Quello che ho scoperto essere il problema era che ci sono due costruttori nell'HelpController. Uno che accetta una HttpConfiguration e un'altra che accetta una GlobalConfiguration. Ho forzato StructureMap a chiamare il costruttore di GlobalConfiguration rendendo privato il costruttore Http.

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

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

che sembrava fare il trucco.

Problemi correlati