StructureMap 和 SignalR - IMessageBus,未定义默认实例
StructureMap and SignalR - IMessageBus, no default instance defined
我使用 nuget 将我的项目更新为 signalr 2.2 和结构图 2.6.4。
现在,当我的程序尝试使用 SignalR 时,结构图会抛出此错误:
StructureMap.StructureMapException was unhandled by user code
HResult=-2146232832
Message=StructureMap Exception Code: 202
No Default Instance defined for
PluginFamily Microsoft.AspNet.SignalR.Messaging.IMessageBus, Microsoft.AspNet.SignalR.Core, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Source=StructureMap
我的代码没有改变,我不相信我在任何地方都需要 IMessageBus,所以我不确定为什么结构图现在这样做。我使用简化的 structuremap 2.6.4/signalr 2.2 设置了一个新项目,并且从不需要为 IMessageBus 设置种子,所以这与我的实现有关,但我不确定升级后发生了什么变化。
有没有人有什么想法可以指点我?
谢谢!
斯科特
这是通过首先在基础 class:
中解决来解决的
public override object GetService(Type serviceType)
{
if (serviceType == null)
return null;
var service = base.GetService(serviceType);
if (service != null) return service;
return container.TryGetInstance(serviceType);
}
对我来说解决这个问题的方法是也对 GetService 方法进行更改。这是我完整的 StrucutreMapSignalRDependencyResolver 以供参考:
public class StructureMapSignalRDependencyResolver : DefaultDependencyResolver
{
private readonly IContainer _container;
public StructureMapSignalRDependencyResolver(IContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
return _container.TryGetInstance(serviceType) ?? base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
var objects = _container.GetAllInstances(serviceType).Cast<object>();
return objects.Concat(base.GetServices(serviceType));
}
}
我使用 nuget 将我的项目更新为 signalr 2.2 和结构图 2.6.4。
现在,当我的程序尝试使用 SignalR 时,结构图会抛出此错误:
StructureMap.StructureMapException was unhandled by user code
HResult=-2146232832
Message=StructureMap Exception Code: 202
No Default Instance defined for
PluginFamily Microsoft.AspNet.SignalR.Messaging.IMessageBus, Microsoft.AspNet.SignalR.Core, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Source=StructureMap
我的代码没有改变,我不相信我在任何地方都需要 IMessageBus,所以我不确定为什么结构图现在这样做。我使用简化的 structuremap 2.6.4/signalr 2.2 设置了一个新项目,并且从不需要为 IMessageBus 设置种子,所以这与我的实现有关,但我不确定升级后发生了什么变化。
有没有人有什么想法可以指点我?
谢谢! 斯科特
这是通过首先在基础 class:
中解决来解决的public override object GetService(Type serviceType)
{
if (serviceType == null)
return null;
var service = base.GetService(serviceType);
if (service != null) return service;
return container.TryGetInstance(serviceType);
}
对我来说解决这个问题的方法是也对 GetService 方法进行更改。这是我完整的 StrucutreMapSignalRDependencyResolver 以供参考:
public class StructureMapSignalRDependencyResolver : DefaultDependencyResolver
{
private readonly IContainer _container;
public StructureMapSignalRDependencyResolver(IContainer container)
{
_container = container;
}
public override object GetService(Type serviceType)
{
return _container.TryGetInstance(serviceType) ?? base.GetService(serviceType);
}
public override IEnumerable<object> GetServices(Type serviceType)
{
var objects = _container.GetAllInstances(serviceType).Cast<object>();
return objects.Concat(base.GetServices(serviceType));
}
}