Ich versuche, die vorgeschlagene Integration here zu implementieren. Leider werden meine Hub-Methoden nicht aufgerufen. Diese Ausnahme verhindert es:Einfacher Injektor (3.1.5) & SignalR (2.2): SimpleInjector.ActivationException
SimpleInjector.ActivationException aufgetreten. HResult = -2146233088
Message = Das entsorgte Objekt kann nicht zugegriffen werden. Objektname: "SimpleInjector.Scope". Quelle = SimpleInjector StackTrace: bei SimpleInjector.InstanceProducer.GetInstance() InnerException: HResult = -2146232798 Nachricht = auf das Objekt kann nicht zugegriffen werden. Objektname: "SimpleInjector.Scope". ObjektName = SimpleInjector.Scope Source = SimpleInjector Stacktrace: bei SimpleInjector.Scope.ThrowObjectDisposedException() bei SimpleInjector.Scope.RequiresInstanceNotDisposed() bei SimpleInjector.Scope.GetInstance [TService, TImplementation] (ScopedRegistration2 Registrierung) bei SimpleInjector.Scope.GetInstance [TService, TImplementation] (ScopedRegistration2 Registrierung Scope scope) bei SimpleInjector.Advanced.Internal.LazyScopedRegistration2.GetInstance (Scope scope) bei lambda_method (Closure) bei Glimpse.SimpleInjector.SimpleInjectorTab.CollectResolve dInstance (Initialisierungskontext Kontext, Func1 instanceProducer) bei SimpleInjector.Container. <> c__DisplayClass52_0.b__0() bei SimpleInjector.InstanceProducer.GetInstance() Innerexception:
Dieser wird geworfen auf:
SimpleInjector.dll SimpleInjector.InstanceProducer.GetInstance() Unbekannt SimpleInjector.Container.GetInstance (System.Type serviceType) Unbekannt idee5.Dispatcher.dll! SimpleInjector.SignalR.SimpleInjectorHubActivator.Create (Microsoft.AspNet.SignalR.Hubs.HubDescriptor descriptor) Zeile 11 C# Microsoft.AspNet .SignalR.Core.dll! Microsoft.AspNet.SignalR.Hubs.DefaultHubManager.ResolveHub (Zeichenfolge hubName) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Hubs.HubDispatcher.CreateHub (Microsoft.AspNet. SignalR.IRequest-Anforderung, Microsoft.AspNet.SignalR.Hubs.HubDescriptor-Deskriptor, Zeichenfolge connectionId, Microsoft.AspNet.SignalR.Hubs.StateChangeTracker-Tracker, bool throwIfFailedToCreate) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR .Hubs.HubDispatcher.OnReceived (Microsoft.AspNet.SignalR.IRequest Anfrage, string connectionId, string data) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequestPostGroupRead.AnonymousMethod__7() Unbekannt Microsoft .AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.TaskAsyncHelper.FromMethod (System.Func func) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequestPostGroupRead.AnonymousMethod__6 (Zeichenfolgedaten) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Transports.WebSocketTransport.OnMessage (Zeichenfolge Nachricht) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.WebSockets.DefaultWebSocketHandler.OnMessage (Zeichenfolge Nachricht) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.WebSockets.WebSocketHandler .ProcessWebSocketRequestAsync (System.Net.WebSockets.WebSocketWebSocket, System.Threading.CancellationToken disconnectToken, System.Func> messageRetriever, Objektzustand) Unbekannt mscorlib.dll! System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext (Objekt Statemachine) Unbekannt mscorlib.dll! System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext ExecutionContext, System .Threading.ContextCallback-Callback, Objektstatus, Bool preserveSyncCtx) Unbekannt mscorlib.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback-Callback, Objektstatus, bool preserveSyncCtx) Unbekannt mscorlib. dll! System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run() Unbekannt mscorlib.dll! System.Runtime.CompilerServices.AsyncMethodBuilderCore.OutputAsyncCausalityEvents.AnonymousMethod__0() Unbekannt mscorlib .dll! System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper.Invoke() Unbekannt mscorlib.dll! System.Runtime.CompilerServices.TaskAwaiter.OutputWaitEtwEvents.AnonymousMethod__0() Unbekannt mscorlib.dll! System.Runtime.CompilerServices.AsyncMethodBuilderCore.ContinuationWrapper .Invoke() Unbekannt mscorlib.dll! System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation..cctor.AnonymousMethod__8_0 (Objektzustand) Unbekannt System.Web.dll! System.Web.AspNetSynchronizationContext.Post.AnonymousMethod__0() Unbekannt System.Web .dll! System.Web.Util.SynchronizationHelper.SafeWrapCallback (System.Action-Aktion) Unbekannt System.Web.dll! System.Web.Util.SynchronizationHelper.QueueAsynchronous.AnonymousMethod__0 (System.Threading.Tasks.Task _) Unbekannt mscorlib.dll! System.Threading.Tasks.ContinuationTaskFromTask.InnerInvoke() Unbekannt mscorlib.dll! System.Threading.Tasks.Task.Execute() Unbekannt mscorlib.dll! System.Threading.Tasks.Task.ExecutionContextCallback (Object Obj Unbekannt) mscorlib.dll! System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext ExecutionContext, System.Threading.ContextCallback Rückruf, Objektzustand, bool preserveSyncCtx) Unbekannt mscorlib.dll! System.Threading.ExecutionContext.Run (System .Threading.ExecutionContext executionContext, System.Threading.ContextCallback-Rückruf, Objektstatus, bool preserveSyncCtx) Unbekannt mscorlib.dll! System.Threading.Tasks.Task.ExecuteWithThreadLocal (ref System.Threading.Tasks.Task currentTaskSlot) Unbekannt mscorlib.dll ! System.Threading.Tasks.Task.ExecuteEntr y (Bool bPreventDoubleExecution) Unbekannt mscorlib.dll! System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() Unbekannt mscorlib.dll! System.Threading.ThreadPoolWorkQueue.Dispatch() Unbekannt mscorlib.dll!-System .Threading._ThreadPoolWaitCallback.PerformWaitCallback()
Eine weitere verdächtige Ausnahme ist:
SimpleInjector.ActivationException ist aufgetreten. HResult = -2146233088 Message = Der SchedulerHub wird als 'Hybridausführungskontextbereich/Webanforderung' registriert, aber die Instanz wird außerhalb des Kontexts eines Kontextkontexts/Webanforderung für Hybridausführung angefordert. Source = SimpleInjector Stacktrace: bei SimpleInjector.Scope.GetScopelessInstance [TService, TImplementation] (ScopedRegistration`2 Registrierung) Innerexception:
SimpleInjector.dll:
Dieser ist in geworfen! SimpleInjector.Scope.GetScopelessInstance (SimpleInjector.Lifestyles.ScopedRegistration registration) Unbekannt SimpleInjector.dll! SimpleInjector.Scope.GetInstance (SimpleInjector.Lifestyles.ScopedRegistration Registrierung SimpleInjector.Scope scope) Unbekannt SimpleInjector.dll! SimpleInjector.Advanced.Internal.LazyScopedRegistration.GetInstance (SimpleInjector.Scope scope) Unbekannt [Lightweightfunktion]
Glimpse.SimpleInjector.dll! Glimpse.SimpleInjector.SimpleInjectorTab.CollectResolvedInstance (SimpleInjector.Advanced.InitializationContext Zusammenhang System.Func instanceProducer) Unbekannt SimpleInjector.dll! SimpleInjector.Container.ApplyResolveInterceptor.AnonymousMethod__0() Unbekannt SimpleInjector.dll! SimpleInjector.InstanceProducer.GetInstance() Unbekannt SimpleInjector.Container.GetInstance (System.Type serviceType) Unbekannt idee5.Dispatcher.dll! Simpl eInjector.SignalR.SimpleInjectorHubActivator.Create (Microsoft.AspNet.SignalR.Hubs.HubDescriptor descriptor) Zeile 11 C# Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Hubs.DefaultHubManager.ResolveHub (Zeichenfolge hubName) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Hubs.HubDispatcher.CreateHub (Microsoft.AspNet.SignalR.IRequest Anfrage, Microsoft.AspNet.SignalR.Hubs.HubDescriptor Beschreiber, string connectionId, Microsoft.AspNet.SignalR .Hubs.StateChangeTracker Verfolger, bool throwIfFailedToCreate) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Hubs.HubDispatcher.GetHubs.AnonymousMethod__39 (Microsoft.AspNet.SignalR.Hubs.HubDescriptor descriptor) Unbekannt System. Core.dll! System.Linq.Enumerable.WhereSelectListIterator.MoveNext() Unbekannt System.Core.dll! System.Linq.Enumerab le.WhereEnumerableIterator.MoveNext() Unbekannt mscorlib.dll! System.Collections.Generic.List.List (System.Collections.Generic.IEnumerable-Auflistung) Unbekannt System.Core.dll! System.Linq.Enumerable.ToList (System. Collections.Generic.IEnumerable Quelle) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Hubs.HubDispatcher.ExecuteHubEvent (Anforderung von Microsoft.AspNet.SignalR.IRequest, Zeichenfolge connectionId, Aktion System.Func) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Hubs.HubDispatcher.OnReconnected (Microsoft.AspNet.SignalR.IRequest Anfrage, string connectionId) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet. SignalR.PersistentConnection.ProcessRequestPostGroupRead.AnonymousMethod__5() Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.Asp Net.SignalR.TaskAsyncHelper.FromMethod (System.Func func) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.PersistentConnection.ProcessRequestPostGroupRead.AnonymousMethod__4() Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Transports.ForeverTransport.ProcessReceiveRequest.AnonymousMethod__1c() Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Transports.ForeverTransport.ProcessMessages (Microsoft.AspNet.SignalR.Transports.ITransportConnection -Verbindung, System.Func initialize) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Transports.ForeverTransport.ProcessReceiveRequest (Microsoft.AspNet.SignalR.Transports.ITransportConnection-Verbindung) Unbekannt Microsoft.AspNet.SignalR.Core. dll! Microsoft.AspNet.SignalR.Transports.ForeverTransport.Process RequestCore.AnonymousMethod__e (Microsoft.AspNet.SignalR.Transports.ForeverTransport t, Microsoft.AspNet.SignalR.Transports.ITransportConnection c) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.TaskAsyncHelper.FromMethod (System. Func func, System .__ Canon arg1, System .__ Canon arg2) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.TaskAsyncHelper.Then (System.Threading.Tasks.Task Aufgabe, System.Func Nachfolger, Microsoft .AspNet.SignalR.Transports.ForeverTransport arg1, arg2 Microsoft.AspNet.SignalR.Transports.ITransportConnection) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Transports.ForeverTransport.ProcessRequestCore (Microsoft.AspNet.SignalR .Transports.ITransportConnection-Verbindung) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Transports.WebSocketTransport.ProcessRequest.AnonymousMethod__2 (Microsoft.AspNet.SignalR.Hosting.IWebSocket Buchse) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Owin.OwinWebSocketHandler.RunWebSocketHandler.AnonymousMethod__0() Unbekannt mscorlib.dll!-System. Runtime.CompilerServices.AsyncTaskMethodBuilder.Startc__DisplayClass1. < b__0> d__3 Statemachine) Unbekannt Microsoft.AspNet.SignalR.Core.dll! Microsoft.AspNet.SignalR.Owin.OwinWebSocketHandler.RunWebSocketHandler.AnonymousMethod__0() Unbekannt mscorlib.dll! System.Threading.Tasks.Task.InnerInvoke() unbekannt mscorlib.dll! System.Threading.Tasks.Task.Execute() unbekannt mscorlib.dll! System.Threading.Tasks.Task.ExecutionContextCallback (object obj) unbekannt mscorlib.dll! System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback-Callback, Objektstatus, bool preserveSyncCtx) Unbekannt mscorlib.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback-Callback, Objektstatus , bool preserveSyncCtx) Unbekannt mscorlib.dll! System.Threading.Tasks.Task.ExecuteWithThreadLocal (ref System.Threading.Tasks.Task currentTaskSlot) Unbekannt mscorlib.dll! System.Threading.Tasks.Task.ExecuteEntry (bool bPreventDoubleExecution) Unbekannt mscorlib.dll! System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() Unbekannt mscorlib.dll! System.Threading.ThreadPoolWorkQueue.Dispatch() Unbekannt mscorlib.dll! System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() Unbekannt
Beide sind gefangen. Und ich vermute, das ist der Grund, warum nichts zu passieren scheint und meine Hub-Methoden nicht aufgerufen werden.
Nach einigen try'n'error-Sitzungen endete ich mit dieser Containerkonfiguration.
public static Container GetInitializeContainer(IAppBuilder app) {
// configure AutoMapper
MapperConfiguration mapperConfig = ConfigureMappings();
// Create the container as usual.
var container = new Container();
ScopedLifestyle hybrid = Lifestyle.CreateHybrid(
() => container.GetCurrentExecutionContextScope() != null,
new ExecutionContextScopeLifestyle(),
new WebRequestLifestyle());
container.Options.DefaultScopedLifestyle = hybrid;
// Registering the types
container.RegisterSingleton(() => mapperConfig.CreateMapper());
container.RegisterSingleton(app);
container.RegisterPerWebRequest<IUrlHelperProvider, UrlHelperProvider>();
// register the singleton services
container.RegisterSingleton<ICacheService>(new CacheService());
container.RegisterSingleton<ILoggingService, LoggingService>();
// register application services
// get the assembly containing the services
Assembly repositoryAssembly = typeof(CompanyService).Assembly;
// get the services namespace
string @namespace = typeof(CompanyService).Namespace;
// register all interfaces in the assembly besides the singletons
var registrations =
from type in repositoryAssembly.GetExportedTypes()
where type.Namespace == @namespace
where type.GetInterfaces().Any(i => i.Name.EndsWith(value: "Service") &&
i.Name != nameof(ICacheService) && i.Name != nameof(ILoggingService))
select new { Service = type.GetInterfaces().Single(i => i.Name.EndsWith(value: "Service")), Implementation = type };
foreach (var reg in registrations) {
container.Register(reg.Service, reg.Implementation, new WebRequestLifestyle());
}
container.RegisterPerWebRequest<ApplicationUserManager>();
container.RegisterPerWebRequest<IUserStore<IdentityUser, Guid>>(() => new UserStore());
container.RegisterInitializer<ApplicationUserManager>(manager => InitializeUserManager(manager, app));
// register the role manager
container.RegisterPerWebRequest<ApplicationRoleManager>();
container.RegisterPerWebRequest<IRoleStore<IdentityRole, Guid>>(() => new RoleStore());
container.RegisterInitializer<ApplicationRoleManager>(manager => InitializeRoleManager(manager));
container.Register<Hubs.SchedulerHub, Hubs.SchedulerHub>(Lifestyle.Scoped);
// register the sign in manager
container.RegisterPerWebRequest<ApplicationSignInManager>();
container.RegisterPerWebRequest(() => AdvancedExtensions.IsVerifying(container)
? new OwinContext(new Dictionary<string, object>()).Authentication
: HttpContext.Current.GetOwinContext().Authentication);
// Register all controllers and filters. Including those in MVC areas
container.RegisterMvcControllers();
container.RegisterMvcIntegratedFilterProvider();
// register OWIN
app.Use(async (context, next) => {
using (container.BeginExecutionContextScope()) {
CallContext.LogicalSetData(name: "IOwinContext", data: context);
await next();
}
});
container.RegisterSingleton<IOwinContextProvider>(new CallContextOwinContextProvider());
return container;
}
Meine Nabe Aktivator:
public class SimpleInjectorHubActivator : IHubActivator {
public SimpleInjectorHubActivator(Container container) {
_container = container;
}
public IHub Create(HubDescriptor descriptor) {
return (IHub) _container.GetInstance(descriptor.HubType);
}
private readonly Container _container;
}
Meine Nabe Dispatcher:
public class SimpleInjectorHubDispatcher : HubDispatcher {
public SimpleInjectorHubDispatcher(Container container, HubConfiguration configuration)
: base(configuration) {
_container = container;
}
protected override Task OnConnected(IRequest request, string connectionId) {
return Invoke(() => base.OnConnected(request, connectionId));
}
protected override Task OnReceived(IRequest request, string connectionId, string data) {
return Invoke(() => base.OnReceived(request, connectionId, data));
}
protected override Task OnDisconnected(IRequest request, string connectionId,
bool stopCalled) {
return Invoke(() => base.OnDisconnected(request, connectionId, stopCalled));
}
protected override Task OnReconnected(IRequest request, string connectionId) {
return Invoke(() => base.OnReconnected(request, connectionId));
}
private async Task Invoke(Func<Task> method) {
using (_container.BeginExecutionContextScope())
await method();
}
private readonly Container _container;
}
Wie kann ich diese Ausnahme verhindern und meine Hub Methoden aufgerufen erhalten werden?
Was ist die Botschaft Ausnahme auf Englisch? – Steven
Und bitte posten Sie die komplette Stack-Trace (mit inneren Ausnahmedetails). – Steven
Hallo Steven. Ich fügte eine englische Version und die Ausnahme hinzu, die in den Diagnosewerkzeugen beofre erscheint. – bdongus