0
解决

我的Global.asax看起来像下面Dependecy是没有得到中的WebAPI(包括OWIN)与Autofac

private void BuildIocContainer() 
    { 
     var builder = new ContainerBuilder(); 
     builder.RegisterModule(new BootstrapModule()); 
     var container = builder.Build(); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
     GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); //Set the WebApi DependencyResolver 
    } 

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

我建立了一个引导模块autofac像下面

public class BootstrapModule : Autofac.Module 
{ 
    private Assembly AssemblyOf<T>() 
    { 
     return typeof(T).Assembly; 
    } 

    private Assembly WebAssembly 
    { 
     get { return Assembly.GetExecutingAssembly(); } 
    } 

    private void RegisterMvc(ContainerBuilder builder) 
    { 
     builder.RegisterType<AsyncControllerActionInvoker>() 
      .As<IActionInvoker>(); 

     builder.RegisterControllers(WebAssembly) 
      .InjectActionInvoker(); 
     builder.RegisterApiControllers(WebAssembly).InjectActionInvoker(); 
    } 

    private void RegisterLogger(ContainerBuilder builder) 
    { 
     builder.Register(CreateLogger) 
      .SingleInstance(); 
     builder.Register(_ => new NLogWrapper(LogManager.GetLogger("DefaultLogger"))) 
      .As<Logging.ILogger>() 
      .SingleInstance(); 
    } 

    private static System.Func<Type, Logging.ILogger> CreateLogger(IComponentContext componentContext) 
    { 
     return type => new NLogWrapper(LogManager.GetLogger(type.FullName)); 
    } 

    protected override void Load(ContainerBuilder builder) 
    { 
     RegisterLogger(builder); 
     RegisterMvc(builder); 
     builder.RegisterAssemblyTypes(WebAssembly) 
       .AsImplementedInterfaces(); 

     builder.RegisterType<UserService>() 
     .As<IUserService>() 
     .InstancePerRequest();    
     builder.RegisterAssemblyTypes(typeof(IUserService).Assembly) 
       .AsImplementedInterfaces(); 
     builder.RegisterAssemblyTypes(typeof(IUserRepository).Assembly) 
       .AsImplementedInterfaces(); 
     builder.RegisterFilterProvider(); 
    } 
} 

现在一个,当我尝试通过邮递员客户端访问帐户控制器时,

private IUserService _userService; 

    public AccountController(IUserService userService) 
    { 
     _userService = userService; 
    } 



    // POST api/Account/Register 
    [AllowAnonymous] 
    [Route("Register")] 
    public HttpStatusCode Register(User model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return HttpStatusCode.BadRequest; 
     } 

     // TODO : Write mapper if needed 
     var user = new ToolUser() 
     { 
      FirstName = model.FirstName, 
      LastName = model.LastName, 
      EmailID = model.EmailID, 
      DOB = Convert.ToDateTime(model.DateOfBirth), 
      Gender = model.Gender.ToString(), 
      TenandID = model.TenantID, 
      Password = model.Password 
     }; 

     HttpStatusCode result = _userService.RegisterUser(user); 

     return result; 
    } 

我收到错误“An error occurred whe n试图创建一个'AccountController'类型的控制器。确保控制器具有一个无参数的公共构造函数。”

我在做什么错?

+0

的[确保控制器具有一个无参数的公共构造错误]可能的复制(http://stackoverflow.com/questions/24254189/make-sure-that-the-controller -has-a-parameterless-public-constructor-error) –

+0

Hi @Div。我在解析界面上没有任何DBContext或其他依赖项。但是我的OWIN在我的WebAPI中有一个启动类以及global.asax。我现在正在使用global.asax中的解决方案 –

回答

2

你应该有类似 HttpConfiguration config = new HttpConfiguration(); 的地方,您可以用注册您的路线等

通行证这个配置你BuildIocContainer() mehod并添加行

config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

,而不是

GlobalConfiguration.Configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container); //Set the WebApi DependencyResolver 

希望帮助