1

Я пытаюсь использовать StructureMap для инъекции зависимостей в концентратор SignalR.Использование StructureMap для инъекции зависимостей SignalR 2.0.1

Многие источники в Интернете говорят, что это должно быть сделано, как в этом ответе: How do you Resolve signalR v2.0 with StructureMap v2.6. Я попробовал, и получил его на работу - по крайней мере, для первого действия после первой pageload.

Когда я пытаюсь выйти из HTML-страницы, содержащей SignalR-JS-Code (или перезагрузить страницу), или когда я использую одну из функций, определенных в моем хабе, второй раз, я получаю это StructureMapException: You cannot use the HttpContextLifecycle outside of a web request. Try the HybridLifecycle instead. в public IHub Create(HubDescriptor descriptor) функция моего HubActivator

Я уже пробовал это, изменив мое сканирование во время самозагрузки:

container.Configure(x => 
{ 
    x.Scan(scan => 
    { 
     scan.TheCallingAssembly(); 
     scan.AssembliesFromApplicationBaseDirectory(GetFilteredAssemblies); 
     scan.WithDefaultConventions().OnAddedPluginTypes(t => t.LifecycleIs(InstanceScope.Hybrid)); 
     scan.LookForRegistries(); 
     scan.AddAllTypesOf<MyProject.Data.Common.IEntity>(); 
     scan.AddAllTypesOf<IMappedEntity>(); 
     scan.AddAllTypesOf<IDatabaseInitializer>(); 
     scan.AddAllTypesOf<IBootstrapMember>(); 
     scan.AddAllTypesOf<IMembership>(); 
    }); 
}); 

Но это не помогло.

Что мне нужно изменить (в SignalR или StructureMap), чтобы исправить это исключение?

ответ

3

Это tourned, что я должен был изменить свою NHibernateRegistry от

[...] 
if (HttpContext.Current != null) 
{ 
    For<ISession>() 
    .HttpContextScoped() 
    .Use(x => x.GetInstance<ISessionFactory>().OpenSession()); 
} 
[...] 

в

[...] 
if (HttpContext.Current != null) 
{ 
    For<ISession>() 
    .HybridHttpOrThreadLocalScoped() 
    .Use(x => x.GetInstance<ISessionFactory>().OpenSession()); 
} 
[...] 

Различный контекст, кажется, чтобы избежать сеанса заблудиться.

+0

Устранена ошибка с помощью 'Web API'. Благодарю. –

Смежные вопросы