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