我是温莎的新手,所以

这是我的安装程序:

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 WindsorControllerFactory : DefaultControllerFactory
{
    private readonly IKernel _kernel;

    public WindsorControllerFactory(IKernel kernel)
    {
        _kernel = kernel;
    }

    public override void ReleaseController(IController controller)
    {
        _kernel.ReleaseComponent(controller);
    }

    protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
    {
        try
        {
            if (controllerType == null)
            {
                throw new HttpException(404,
                    string.Format("The controller for path '{0}' could not be found.",
                    requestContext.HttpContext.Request.Path));
            }
            return (IController) _kernel.Resolve(controllerType);
        }
        catch(Exception ex)
        {
            return null;
        }
    }

}

从Controller继承的所有控制器都可以很好地解析。 但是当我尝试实例化这样的东西时:

public class ArticleController : RestController<Article>
{
    protected override JsonResult Create(Article item)
    {
        ...
    }
}

RestController也继承自Controller

它抛出IControllerFactory'TheStorage.Web.Factories.WindsorControllerFactory'未返回名称为'Article'的控制器

我做错了什么?

===============>>#1 票数:1 已采纳

您收到的错误是由于您在工厂尝试/捕获而引起的。 您不应该那样做。

现在,最有可能发生的事情是您的容器无法解析您的控制器,可能是因为它具有无法解决的依赖关系,还是没有注册(也许您将其放在错误的名称空间中)?

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

  ask by CodeAddicted translate from so

未解决问题?本站智能推荐:

2回复

温莎城堡解决了MVC区域接口的错误实现

我的解决方案的核心项目中有一个接口:IPersonManager,它具有两个具体的实现,分别属于各自的项目。 在我的Web项目中,有一个MVC区域代表这两个项目,并且在每个区域中都有一个框架安装程序类,该类将人员管理器类注册到每个区域中的接口,如下所示: 注册后,当我在内核中获取I
1回复

温莎型工厂-IoC外部控制器类

注意:只是为了澄清,这个问题不是关于在MVC控制器中设置IoC,而是关于它们的设置。 我的控制器上的IoC工作正常,但是我也需要在自定义类中的控制器外部运行它(在CacheManager类中,该类使用CacheBuilders的列表来构建缓存)。 为此,到目前为止,我一直将Winds
1回复

如果将IDisposable瞬态组件注入控制器(城堡温莎),该怎么办

基本上,我应该自己打电话给.Dispose()吗? 因为从我阅读的内容来看,温莎不会帮我做到这一点。 我是IoC的新手,这有点令人困惑。
3回复

什么是IOC?为什么我要在我的MVC应用程序中使用Castle Windsor等? [重复]

可能重复: 什么是国际奥委会? 需要一些实用的代码示例来说明 我听说过国际奥委会的组织很多,但是我仍然不确定这是什么以及为什么要这样做。 我天真的理解是,它以某种方式使您可以控制,但是我不确定。 我知道温莎城堡是ASP.Net MVC的流行产品,但我不知道它的作用。
1回复

从MVVM客户端应用程序反转控制使用

所以,我正在开始一个新的企业项目,并希望从使用IoC容器开始。 到目前为止,该项目包括一个MVVM WPF客户端和另外四个程序集(CRM,ReportManager,Security Manager和Repository Manager程序集)。 MVVM客户端界面基于Shell和一系列
4回复

使用Nhibernate将依赖项注入域模型类(ASP.NET MVC + IOC)

我正在构建一个ASP.NET MVC应用程序,它使用DDD(域驱动设计)方法,由NHibernate处理数据库访问。 我有域模型类(管理员),我想通过一个IOC容器,如Castle Windsor注入依赖,如下所示: 我基本上想要为SetPassword方法注入IHashingServ
6回复

如何使用城堡windsor覆盖组件?

我想在给定的windsor容器中重新定义(默认)实现。 那是OverWrite的用途吗? 但不起作用。 还有其他想法吗? 欢呼,拉尔斯
1回复

如何使用最新的温莎城堡WCF集成工具

我正在使用Castle WCF集成工具,因为我想将WCF服务与Windsor IOC集成。 我面临的问题是我无法为DefaultServiceHostFactory设置IKernel。 我设置了容器: 然后,我设置了SVC文件: 当WCF尝试实例化DefaultSer
2回复

为什么不使用IoC容器来解析实体/业务对象的依赖关系?

我理解DI背后的概念,但我只是在学习不同的IoC容器可以做什么。 似乎大多数人都主张使用IoC容器来连接无状态服务,但是如何将它们用于实体等有状态对象呢? 无论是对还是错,我通常会用行为填充我的实体,即使这种行为需要外部类。 例: 如您所见,依赖项是Constructor In
1回复

如何使用代码在Castle Windsor v3 +中添加设施配置?

在Castle Windsor v3 +中,不建议使用IWindsorContainer.AddFacility<T>(string idlnConfiguration)方法。 在旧版本中,可以通过调用IConfigurationStore.AddFacilityConfigura