asp.net - SignalR:解析 IMessageBus

标签 asp.net signalr structuremap signalr-hub

我正在使用this将依赖项注入(inject)我的 Hub 类的方法:

public class StructureMapDependencyResolver : DefaultDependencyResolver
{
        private readonly IContainer _container;
        public StructureMapDependencyResolver(IContainer container)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }
            _container = container;
        }
        public override object GetService(Type serviceType)
        {
            return !serviceType.IsAbstract && !serviceType.IsInterface && serviceType.IsClass
                               ? _container.GetInstance(serviceType)
                               : (_container.TryGetInstance(serviceType) ?? base.GetService(serviceType));
        }
        public override IEnumerable<object> GetServices(Type serviceType)
        {
            return _container.GetAllInstances(serviceType).Cast<object>().Concat(base.GetServices(serviceType));
        }
 }

为了使用它,我在 Global.asax 中有这些代码行:

SmObjectFactory.Container.Configure(x =>
            {
                x.For<IDependencyResolver>().Singleton().Add<StructureMapDependencyResolver>();
            });
            GlobalHost.DependencyResolver = SmObjectFactory.Container.GetInstance<IDependencyResolver>();

它在 SignalR 版本 2.1.2 中工作得很顺利,但是升级到 SignalR 版本 2.2.0 后我收到此错误:

No default Instance is registered and cannot be automatically determined for type 'Microsoft.AspNet.SignalR.Messaging.IMessageBus'

There is no configuration specified for Microsoft.AspNet.SignalR.Messaging.IMessageBus

1.) new AckSubscriber(*Default of IMessageBus*, *Default of IAckHandler*)
2.) Microsoft.AspNet.SignalR.Infrastructure.AckSubscriber
3.) Instance of Microsoft.AspNet.SignalR.Infrastructure.AckSubscriber
4.) Container.GetInstance(Microsoft.AspNet.SignalR.Infrastructure.AckSubscriber)

它说无法解析 IMessageBus!我已经尝试过这个解决方案( + ),但它没有解决问题。
我应该提供该依赖项的实现吗?例如这样的事情:

x.For<IMessageBus>().Use<MessageBus>();

有什么想法吗?

最佳答案

谢谢@VahidN,实际上我应该首先从基类解析(+):

public override object GetService(Type serviceType) {
    if (serviceType == null) return null;

    var service = base.GetService(serviceType);
    if (service != null) return service;

    return (!serviceType.IsAbstract && !serviceType.IsInterface && serviceType.IsClass) ? _container.GetInstance(serviceType) : _container.TryGetInstance(serviceType);
} 

关于asp.net - SignalR:解析 IMessageBus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31793209/

相关文章:

asp.net - 避免向服务器的每个请求附加 cookie

javascript - 禁用按钮单击

c# - 从服务器向所有客户端发送信号器消息

c# - 特定于环境的 StructureMap 配置?

asp.net - Razor 语法高亮

c# - 如何使用 Azure 辅助角色和 OWIN 扩展 SignalR

javascript - IE9内存泄漏

caSTLe-windsor - 无需配置即可自动注册所有内容(非通用)的 IoC 容器(程序集到程序集)

c# - 使用 IContainers 比直接使用 ObjectFactory (结构图)更好吗?

c# - 禁用 SSL v3.0 并切换到 SHA 256 后 HTTPS 连接超时