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 

希望幫助