2014-06-04 39 views
1

我同时使用MVC和的WebAPI项目。 这是一个成员资格重新启动应用程序,所以我采取了示例单一的应用程序项目,并稍作修改以适应。然而,当我尝试调用的WebAPI控制器我不断收到一个错误使用Autofac用的WebAPI和mvc5.1不工作的WebAPI

确保控制器具有一个无参数的公共构造

的DI工作正常的控制器。

还有什么我需要做的与webapi使用autofac?

这是从我的startup.cs

 public void Configuration(IAppBuilder app) 
    { 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = "External", 
      AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive 
     }); 
     ConfigureMembershipReboot(app); 
    } 

    private static void ConfigureMembershipReboot(IAppBuilder app) 
    { 
     System.Data.Entity.Database.SetInitializer(new System.Data.Entity.MigrateDatabaseToLatestVersion<DefaultMembershipRebootDatabase, BrockAllen.MembershipReboot.Ef.Migrations.Configuration>()); 
     //System.Data.Entity.Database.SetInitializer(new System.Data.Entity.CreateDatabaseIfNotExists<DefaultMembershipRebootDatabase>()); 
     var cookieOptions = new CookieAuthenticationOptions 
     { 
      AuthenticationType = MembershipRebootOwinConstants.AuthenticationType 
     }; 
     BuildAutofacContainer(app, cookieOptions.AuthenticationType); 
     app.UseMembershipReboot(cookieOptions); 
    } 

    private static void BuildAutofacContainer(IAppBuilder app, string authType) 
    { 
     var builder = new ContainerBuilder(); 

     var config = CreateMembershipRebootConfiguration(app); 

     builder.RegisterInstance(config).As<MembershipRebootConfiguration>(); 
     builder.RegisterType<DefaultUserAccountRepository>() 
      .As<IUserAccountRepository>() 
      .As<IUserAccountQuery>() 
      .InstancePerLifetimeScope(); 
     builder.RegisterType<UserAccountService>().OnActivating(e => 
     { 
      var owin = e.Context.Resolve<IOwinContext>(); 
      var debugging = false; 
     #if DEBUG 
      debugging = true; 
     #endif 
      e.Instance.ConfigureTwoFactorAuthenticationCookies(owin.Environment, debugging); 
     }) 
     .AsSelf() 
     .InstancePerLifetimeScope(); 
     builder.Register(ctx => 
     { 
      var owin = ctx.Resolve<IOwinContext>(); 
      return new OwinAuthenticationService(authType, ctx.Resolve<UserAccountService>(), owin.Environment); 
     }) 
     .As<AuthenticationService>() 
     .InstancePerLifetimeScope(); 

     builder.Register(ctx=>HttpContext.Current.GetOwinContext()).As<IOwinContext>(); 
     builder.RegisterControllers(typeof(Startup).Assembly); 

     builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 

     var container = builder.Build(); 
     System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
    } 

回答

0

代码这是一个1个衬垫:)

GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);