Model view controller 用WindsorController工厂解决MVC控制器

Model view controller 用WindsorController工厂解决MVC控制器,model-view-controller,inversion-of-control,castle-windsor,ioc-container,Model View Controller,Inversion Of Control,Castle Windsor,Ioc Container,我刚到温莎,所以 这是我的安装程序: public class ControllersInstaller : IWindsorInstaller { public void Install(IWindsorContainer container, IConfigurationStore store) { container.Register(FindControllers().Configure(ConfigureControllers())); }

我刚到温莎,所以

这是我的安装程序:

public class ControllersInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(FindControllers().Configure(ConfigureControllers()));
    }

    private ConfigureDelegate ConfigureControllers()
    {
        return c => c.LifeStyle.Transient;
    }

    private BasedOnDescriptor FindControllers()
    {
        return AllTypes.FromThisAssembly()
            .BasedOn<IController>()
            .If(Component.IsInSameNamespaceAs<HomeController>())
            .If(t => t.Name.EndsWith("Controller"));
    }
}
从控制器继承的所有控制器都得到了很好的解决。但当我尝试实例化如下内容时:

public class ArticleController : RestController<Article>
{
    protected override JsonResult Create(Article item)
    {
        ...
    }
}
公共类ArticleController:RestController
{
受保护的重写JsonResult创建(项目)
{
...
}
}
RestController也从控制器继承

它抛出 IControllerFactory“storage.Web.Factories.WindsorControllerFactory”未返回名为“Article”的控制器。


我做错了什么?

您得到的错误是由于您在工厂中投入的尝试/捕获。你不应该那样做

现在,最可能发生的情况是,您的容器无法解析您的控制器,可能是因为它具有不可解析的依赖项,或者它没有被注册(可能您将它放在了错误的命名空间中)

一旦失败,温莎将准确地告诉您问题所在。

您是否尝试过对FindController使用BasedOn?
public class ArticleController : RestController<Article>
{
    protected override JsonResult Create(Article item)
    {
        ...
    }
}