StructureMap и SignalR - IMessageBus, экземпляр по умолчанию не определен

Я использовал nuget для обновления моего проекта до версии 2.2r и карты структуры 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 где-либо, поэтому я не уверен, почему структурная карта сейчас делает это. Я настраиваю новый проект с упрощенной структурной картой 2.6.4/signalr 2.2, и мне никогда не нужно заполнять IMessageBus, так что это что-то в моей реализации, но я не уверен, что изменилось после обновления.

У кого-нибудь есть идея, чтобы указать мне?

Спасибо! Скотт

2 ответа

Решение

Это было решено с помощью поиска в базовом классе:

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));
    }
}
Другие вопросы по тегам