Asp.net mvc 4 MVC4RC中温莎依赖项注入参数化apicontroller

Asp.net mvc 4 MVC4RC中温莎依赖项注入参数化apicontroller,asp.net-mvc-4,asp.net-web-api,dependencies,castle-windsor,Asp.net Mvc 4,Asp.net Web Api,Dependencies,Castle Windsor,所以,我用这个例子在MVC4RCWebAPI中使用Windsor进行依赖项注入,但我得到一个异常,它无法将依赖项解析到我的ApicController public class StatisticsController : ApiController { private readonly ILogger _logger; private readonly IClickMessageProducer _producer; public StatisticsControll

所以,我用这个例子在MVC4RCWebAPI中使用Windsor进行依赖项注入,但我得到一个异常,它无法将依赖项解析到我的ApicController

public class StatisticsController : ApiController
{
    private readonly ILogger _logger;
    private readonly IClickMessageProducer _producer;

    public StatisticsController(ILogger logger, 
        IClickMessageProducer clickMsgProducer)
    {
        _logger = logger;
        _producer = clickMsgProducer;
    }

    public string Get(string msg, string con) {...}
}
My Global.asax如下所示:

protected void Application_Start()
    {
        // different configs removed for brevity

        BootstrapContainer();
    }

    private static IWindsorContainer _container;

    private static void BootstrapContainer()
    {
        _container = new WindsorContainer()
            .Install(FromAssembly.This(), new ProducerInstaller())
            .Install(FromAssembly.This(), new WebWindsorInstaller());

        GlobalConfiguration.Configuration.Services.Replace(
            typeof(IHttpControllerActivator),
            new WindsorHttpControllerActivator(_container));
    }
安装人员向温莎提供了
IClickMessageProducer
所需的参考资料。我在一个真正的MVC4项目中使用了
IController
,所以我相信该部件可以正常工作

要指定,这是我在尝试通过对API的get调用访问
StatisticsController
中的方法时收到的错误消息:

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
    Can't create component 'APIMVC.Controllers.StatisticsController'
    as it has dependencies to be satisfied. 
    'APIMVC.Controllers.StatisticsController' is waiting for the following 
    dependencies: - Service 'Castle.Core.Logging.ILogger' which was not registered.
</ExceptionMessage>
<ExceptionType>Castle.MicroKernel.Handlers.HandlerException</ExceptionType>
<StackTrace>...</StackTrace>
</Error>

发生了一个错误。
无法创建组件“APIMVC.Controllers.StatisticsController”
因为它需要满足依赖关系。
“APIMVC.Controllers.StatisticsController”正在等待以下操作
依赖项:-未注册的服务“Castle.Core.Logging.ILogger”。
Castle.MicroKernel.Handlers.HandlerException
...
电话是这样的: "http://localhost:60000/api/statistics?msg=apitest&con=apimvc"


如果有人对我的Windsor实现的问题有一个工作示例或只是一个评论,我很乐意看到。

您的ILogger实现未在Windsor注册。从StatisticsController中删除ILogger参数,然后重试。如果有效,您将需要注册ILogger实现。

\u container=new WindsorContainer().Install(FromAssembly.This(),new ProducerInstaller()).Install(FromAssembly.This(),new WebWindsorInstaller())

这是错误的部分。如您所见,我两次调用
Install(fromsassembly.This())
witch导致
LoggerInstaller
尝试添加
LoggingFacility
导致错误

新的实现如下所示:
\u container=new WindsorContainer().Install(fromsassembly.This()、new ProducerInstaller()、new WebWindsorInstaller())

事实上,这就是新WindsorContainer()中的FromAssembly.This()方法要解决的问题,如果项目中实现了正确的安装程序类,请参阅我自己的答案以获得解决方案。