【问题标题】:NServiceBus/MVC injection - Autofac doesn't like IControllerFactory?NServiceBus/MVC 注入 - Autofac 不喜欢 IControllerFactory?
【发布时间】:2013-02-16 01:18:07
【问题描述】:

全部。由于 Pluralsight 和互联网,我开始使用 NServiceBus 并很好地掌握了基础知识。我有一个股票 MVC 4 项目,我为我的控制器设置了依赖注入(感谢this blog post)。

这是我在 Global.asax 中设置总线的方式:

_bus = Configure.With()
                .DefaultBuilder()
                .ForMVC()
                .Log4Net()
                .XmlSerializer()
                .MsmqTransport()
                .UnicastBus()
                .SendOnly();

我将它分配给一个局部私有变量,因为我需要访问 Global 中的总线,所以我可以在 Session_End 上做一些事情。但是,当我运行时,出现以下错误:

请求的服务“System.Web.Mvc.IControllerFactory”尚未被 挂号的。为避免此异常,请将组件注册到 提供服务,检查服务注册使用 IsRegistered(),或使用 ResolveOptional() 方法来解决 可选依赖。

根据我的堆栈跟踪,失败点是 Autofac 尝试解析类型时。为了理智起见,我删除了私有变量,只使用了 Configure 语句,同样的事情。我还在这个应用程序中连接了 Ninject,因为这是我选择的 IoC。认为它以某种方式干扰了 Autofac,我从等式中删除了 Ninject,但仍然无法正常工作。

所以我的问题是,我做错了什么?我错过了什么吗?这是我第一次使用 NServiceBus,但从我所看到的一切来看,这应该可以正常工作。任何信息都会非常有帮助。谢谢。

【问题讨论】:

    标签: model-view-controller dependency-injection nservicebus autofac


    【解决方案1】:

    看看我们的 MVC4 示例(这是针对 v4 运行的,下一个主要版本):
    https://github.com/NServiceBus/NServiceBus/tree/develop/Samples/Messaging.Msmq/MyWebClient

    【讨论】:

    • 谢谢,约翰。我将在这个周末分叉那个 repo,可能明天看看,看看有什么不同。知道v4什么时候出吗?比什么都好奇。 :)
    【解决方案2】:

    我从您的代码中找到了解决方案,约翰!这是我的问题。这就是我的 Dependency Resolver Adapter 中的内容:

    public object GetService(Type serviceType)
    {
        _builder.Build(serviceType);
    }
    

    我需要做的是你在 MVC4 示例中所做的:

    public object GetService(Type serviceType)
    {
        return (Configure.Instance.Configurer.HasComponent(serviceType)) ? _builder.Build(serviceType) : null;
    }
    

    一旦我这样做了,一切都会自行解决。再次感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 2022-08-03
      • 2022-12-13
      • 2014-08-25
      相关资源
      最近更新 更多