2015-02-11 13 views
1

我用nuget将我的项目更新到signalr 2.2和结构图2.6.4。
现在,当我的程序尝试使用SignalR,结构图是引发此错误:StructureMap和SignalR - IMessageBus,没有定义默认实例

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,所以我不知道为什么结构地图现在正在这样做。我使用简化的结构图2.6.4/signalr 2.2设置了一个新项目,并且从不需要种子IMessageBus,所以这是关于我的实现的,但我不确定升级后会发生什么变化。

有没有人有想法指向我?

谢谢! 斯科特

回答

1

这是首先寻找在基类来解决解决:

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

} 
0

什么解决这对我来说是做出改变的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)); 
    } 
} 
相关问题