2016-05-06 5 views
0

Я пытаюсь использовать Autofac с контроллерами WebApi. У меня есть:Autofac с контроллером Web Api

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

Вот мой AutofacConfig:

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(); 
    } 
} 

Тогда я пытаюсь установить DependencyResolver:

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); 
    } 
} 

Но во время запроса я получаю: «Убедитесь, что контроллер имеет беззадачный публичный конструктор ».

Также я попытался установить DependencyResolver в классе AutofacConfig, так же, как в tutorial

Что случилось с этим?

+0

Я определяю свой контейнер как статическое поле на Global.asax и создаю его после всех таблиц. Контейнер = новый WindsorContainer(). Установить (FromAssembly.This()); GlobalConfiguration.Configuration.DependencyResolver = new WindsorDependencyResolver (Container.Kernel); – Fran

ответ

0

Сообщение об ошибке означает, что ваш контроллер имеет некоторые зависимости, которые Autofac не знает, как их вводить. Другими словами, конструктор вашего контроллера имеет некоторые зависимости (параметры), которые должны быть введены, но сами зависимости (службы) не были зарегистрированы в Autofac.

Если вы разделите код конструктора вашего контроллера, мы сможем идентифицировать эти незарегистрированные зависимости для вас.

Смежные вопросы