【问题标题】:Castle Windsor Activation Error IController, key "home"Castle Windsor 激活错误 IController,键“home”
【发布时间】:2014-01-10 14:59:14
【问题描述】:

我收到以下错误:

Microsoft.Practices.ServiceLocation.ActivationException 未处理 通过用户代码消息=尝试获取时发生激活错误 IController 类型的实例,键“home”
来源=Microsoft.Practices.ServiceLocation StackTrace: 在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(类型 serviceType,字符串键)在 c:\Home\Chris\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 57 在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance[TService](字符串 键入 c:\Home\Chris\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 103 在 AN.Core.Windsor.Web.WindsorControllerFactory.CreateController(RequestContext requestContext,字符串控制器名称)内部异常: System.MissingMethodException 消息=找不到方法:'Castle.Core.Internal.GraphNode[] Castle.Core.Internal.GraphNode.get_Dependers()'。 来源=AN.Core.Windsor.Web 堆栈跟踪: 在 AN.Core.Windsor.Web.WindsorServiceLocator.DoGetInstance(类型 服务类型,字符串键) 在 Microsoft.Practices.ServiceLocation.ServiceLocatorImplBase.GetInstance(类型 serviceType,字符串键)在 c:\Home\Chris\Projects\CommonServiceLocator\main\Microsoft.Practices.ServiceLocation\ServiceLocatorImplBase.cs:line 49 内部异常:

我确实有一个 HomeController:

public interface IHomeController
{
    ActionResult Index();
}

public class HomeController : Controller, IHomeController
{
    [HttpGet]
    public ActionResult Index()
    {
        RegistrationModel model = new RegistrationModel();
        model.FillTestData();
        return View(model);
    }
}

这是我的 global.asax 中的初始化代码:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    BootstrapWindsorContainer();
}

private static void BootstrapWindsorContainer()
{
    _container = new WindsorContainer()
        .Install(FromAssembly.InThisApplication());             

    ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(_container));

    var controllerFactory = new WindsorControllerFactory();
    ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}

谢谢, 格雷格

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 castle-windsor


    【解决方案1】:

    我执行了这些步骤以使其在测试项目中工作:

    Install-Package Castle.Windsor.Web.Mvc
    

    WindsorControllerFactory 构造函数稍作改动以传入_container,如下所示:

        private static void BootstrapWindsorContainer()
        {
            _container = new WindsorContainer()
                .Install(FromAssembly.InThisApplication());
    
            ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(_container));
    
            var controllerFactory = new WindsorControllerFactory(_container);
            ControllerBuilder.Current.SetControllerFactory(controllerFactory);
        }
    

    下面的无参构造函数:

     var controllerFactory = new WindsorControllerFactory();
    

    导致此错误:

    Plumbing.WindsorControllerFactory' does not contain a constructor that takes 0 arguments
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多