“没有无参数构造函数”错误实例化控制器注册w / Windsor容器

时间:2010-09-19 04:09:31

标签: asp.net-mvc-2 castle-windsor

使用MVC并尝试对控制器使用依赖注入,但是当我尝试在具有依赖性的控制器上调用方法时,我得到“无参数构造函数”错误。这是我的设置:

ProductRepository : IProductRepository


ProductService : IProductService {
     public ProductService(IProductRepository repository) {} }

ProductController {
     public ProductController(IProductService service) {} }

在Global.asax中:

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        InitializeServiceLocator();
        RegisterRoutes(RouteTable.Routes);
    }


    protected virtual void InitializeServiceLocator()
    {
        IWindsorContainer container = new WindsorContainer();
        ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));

        container.RegisterControllers(typeof(HomeController).Assembly);
        ComponentRegistrar.AddComponentsTo(container);
        foreach (var handler in container.Kernel.GetAssignableHandlers(typeof(object)))
        {
            System.Diagnostics.Debug.WriteLine(String.Format("{0} {1}",
               handler.ComponentModel.Service,
               handler.ComponentModel.Implementation));
        }

        ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
    }

ComponentRegistrar:

public static void AddComponentsTo(IWindsorContainer container)
{
    AddCustomRepositoriesTo(container);
    AddApplicationServicesTo(container);
}

当InitializeServiceLocator完成时,我可以看到所有控制器,服务和存储库都已注册。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我仍然想知道这个问题,但我已经通过创建自己的WindsorControllerFactory来解决这个问题(修改以避免任何web.config操作):http://mvcsharp.wordpress.com/2010/01/09/setting-up-ioc-in-asp-net-mvc-using-castle-windsor/

上一代码中的WindsorControllerFactory是MvcContrib.Castle.WindsorControllerFactory。是否有人成功使用MvcContrib版本?

感谢。