2016-05-06 13 views
0

Ich versuche Autofac mit WebApi-Controller zu verwenden. Ich habe:Autofac mit Web-API-Controller

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     AutofacConfig.Register(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 

Hier mein AutofacConfig ist:

public class AutofacConfig 
{  
    public static IContainer Container { get; private set; } 
    public static void Register() 
    { 
     var builder = new ContainerBuilder(); 
     // Register your Web API controllers. 
     builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 

     //Register repositories and services.    
     Container = builder.Build(); 
    } 
} 

Dann versuche ich DependencyResolver zu setzen: Empfangen ich

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 
     config.Filters.Add(new ExceptionHandlingAttribute()); 
     var container = AutofacConfig.Container;//I have registered controllers here!!! 
     config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 
    } 
} 

Aber während der Anfrage: „Stellen Sie sicher, dass der Controller einen parameterlosen öffentlichen Konstruktor hat ".

Auch habe ich versucht, die DependencyResolver in der AutofacConfig Klasse zu setzen, genau wie in den tutorial

Was ist daran falsch?

+0

Ich definiere meinen Container als statisches Feld auf Global.asax und instanziiere es nach allen Boilerplate-Registern. Container = neuer WindsorContainer(). Install (FromAssembly.This()); GlobalConfiguration.Configuration.DependencyResolver = neuer WindsorDependencyResolver (Container.Kernel); – Fran

Antwort

0

Die Fehlermeldung bedeutet, dass Ihr Controller einige Abhängigkeiten hat, dass Autofac nicht weiß, wie er sie für Sie injiziert. Mit anderen Worten, der Konstruktor Ihres Controllers hat einige Abhängigkeiten (Parameter), die injiziert werden müssen, aber diese Abhängigkeiten (Services) selbst wurden nicht in Autofac registriert.

Wenn Sie den Konstruktorcode Ihres Controllers freigeben, können wir diese nicht registrierten Abhängigkeiten für Sie identifizieren.