2014-03-28 126 views
0

我一直在试图让温莎城堡到我的数据库上下文注入到我的控制器,我一直在关注在温莎城堡website城堡温莎构造器注入

我的代码教程如下
引导程序

internal class IOCContainerBootstrap 
    { 
     private static IWindsorContainer container; 
     public static void Configure() 
     { 

      container = new WindsorContainer() 
       .Install(FromAssembly.This()); 

      var controllerFactory = new GravityClimbingControllerFactory(container.Kernel); 

      ControllerBuilder.Current.SetControllerFactory(controllerFactory); 

     } 

     #region IDisposable Members 

     public static void Dispose() 
     { 
      container.Dispose(); 
     } 

     #endregion 
    } 

安装程序

public class ControllersInstaller : IWindsorInstaller 
    { 
     public void Install(IWindsorContainer container, IConfigurationStore store) 
     { 
      container.Register(Classes.FromThisAssembly() 
           .BasedOn<IController>() 
           .LifestyleTransient()); 

      container.Register(Component.For<DbContext>().ImplementedBy<GravityClimbingEntities>()); 
     } 
    } 

    public class APIInstaller : IWindsorInstaller 
    { 
     public void Install(IWindsorContainer container, IConfigurationStore store) 
     { 
      container.Register(Classes 
       .FromThisAssembly() 
       .BasedOn<IHttpController>() 
       .ConfigureFor<ApiController>(c => { c.PropertiesIgnore(pi => false); }) 
       .LifestyleTransient()); 
     } 
    } 

最后 我的API控制器

public class ArticalsController : ApiController 
    { 
     private readonly DbContext _context; 
     private readonly Db.Repositories.ArticalRepository repository; 
     public ArticalsController(DbContext context) 
     { 
      _context = context; 
      repository = new Db.Repositories.ArticalRepository(context); 
     } 

     [HttpGet] 
     public string HelloWorld() 
     { 
      return "Hello.world"; 
     } 
    } 

当我调试我没有得到任何错误,它说,它可以解决依赖

Debugger Information

但是当我尝试调用API控制器我收到以下错误消息

{ 
    "Message" : "An error has occurred.", 
    "ExceptionMessage" : "Type 'ArticalsController' does not have a default constructor", 
    "ExceptionType" : "System.ArgumentException" 
} 

有什么愚蠢的我做错了,我看不到?

回答

0

对于面临同样问题的人,我发现了这个问题。

温莎城堡不知道该IHTTPControler(底座为APIController),所以我需要创建一个IHttpControllerActivator并将其连接到GlobalConfiguration.Configuration.Services

我发现这个链接,启用此here