Autofac не разрешает параметр конструктора для контроллеров WebAPI2

Я пытаюсь использовать Autofac для DI-контейнера для приложения Asp.Net MVCA с WebApi2 и OWIN. Мой global.asax.cs ничего не имеет в Application_Start(), Мой startup.cs имеет следующую конфигурацию:

public void Configuration(IAppBuilder app)
{
    DependencyInjectionConfig.Configure(app);

    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

И DependencyInjectionConfig.Configure - это:

public static void Configure(IAppBuilder app)
{
    var config = new HttpConfiguration(); //this means webapi controllers don't use DI container
    //var config = GlobalConfiguration.Configuration; //this makes MVC view controllers fail to do anything


    var builder = new ContainerBuilder();
    var assm = Assembly.GetExecutingAssembly();

    //MVC and WebAPI Controllers
    builder.RegisterControllers(assm);
    builder.RegisterApiControllers(assm);
    WebApiConfig.Register(config);

    //Model Binders
    builder.RegisterModelBinders(assm);
    builder.RegisterModelBinderProvider();

    //Modules
    builder.RegisterModule<AutofacWebTypesModule>();

    //MVC Views
    builder.RegisterSource(new ViewRegistrationSource());

    //MVC and WebAPI Filters

    builder.RegisterFilterProvider();
    builder.RegisterWebApiFilterProvider(config);

    //Finally, Any custom registrations
    RegisterComponents(builder, assm);
    /* My items show in the builder as expected at this point */

    //build the container
    var container = builder.Build();
    DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
    config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

    //Special OWIN bits
    app.UseAutofacMiddleware(container);
    app.UseAutofacMvc();
    app.UseAutofacWebApi(config);
    app.UseWebApi(config);
}

Моя проблема в том, что Autofac, кажется, не делает никакого разрешения параметров независимо от того, если я использую var config = new HttpConfiguration(); или же var config = GlobalConfiguration.Configuration;, бонус, если я использую GlobalConfiguration.Configuration Контроллеры MVC для представлений полностью не работают.

ApiController довольно прост:

public class MessagesController : ApiController
{
     private IMesageHandler MessageHandler {get; set;}
     public MessagesController(IMessageHandler messageHandler)
     {
         this.MessageHandler = messageHandler;
     }
     [HttpGet]
     public string Get()
     {
         return "Hello World";
     }
}

Исключением является то, что он не может найти конструктор без параметров (потому что контейнер Autofac выглядит дремлющим).

0 ответов

Другие вопросы по тегам