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