【发布时间】:2015-08-04 15:54:25
【问题描述】:
我正在使用this 方式将依赖项注入到我的 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>();
有什么想法吗?
【问题讨论】:
标签: asp.net signalr structuremap signalr-hub