0

因此,我使用Mark Seemann 的示例在 MVC 4 RC Web Api 中使用 Windsor 进行依赖注入,但我收到异常说它无法解析对我的 ApiController 的依赖

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) {...}
}

我的 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));
    }

安装人员为 Windsor 提供了所需的参考资料IClickMessageProducer。我IController在一个真正的 MVC 4 项目中使用它,所以我相信这部分是有效的。

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

<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>

调用是这样的:“http://localhost:60000/api/statistics?msg=apitest&con=apimvc”

如果有人有一个工作示例或只是对我的 Windsor 实施问题的评论,我会很高兴看到它。

4

2 回答 2

0

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

于 2012-11-28T15:25:56.513 回答
0

_container = new WindsorContainer().Install(FromAssembly.This(), new ProducerInstaller()).Install(FromAssembly.This(), new WebWindsorInstaller());

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

新的实现如下所示: _container = new WindsorContainer().Install(FromAssembly.This(), new ProducerInstaller(), new WebWindsorInstaller());

于 2012-11-29T13:01:51.947 回答