internal SessionInformation(Session session, SessionLocalInfo info, ISessionTrackingData trackingData, IExecutionResultInternal messages) { DebugContract.Requires(session, "session"); DebugContract.Requires(trackingData); _context = session.SessionContext; TrackingData = trackingData; CancellationToken = session.CancellationToken; IsAborted = session.IsAborted; IsNested = session.IsNested; Store = session.Store; IsReadOnly = session.IsReadOnly; Mode = info.Mode; OriginStoreId = info.OriginStoreId; SessionId = session.SessionId; DefaultDomainModel = info.DefaultDomainModel; _contextInfos = info.Infos; Events = session.Events.ToList(); if (messages != null) { HasErrors = messages.HasErrors; HasWarnings = messages.HasWarnings; } }
/// <summary> /// Notification de la fin de la session /// </summary> private ISessionInformation OnSessionCompleted(SessionLocalInfo info, IEnumerable <IEventNotifier> notifiers, IExecutionResultInternal messages) { DebugContract.Requires(notifiers != null, "notifiers"); // On fait une copie de la session car les événements peuvent // être souscrits dans un autre thread var sessionContext = new SessionInformation(this, info, SessionDataContext.TrackingData, messages); try { // Notifications via RX. foreach (var notifier in notifiers) { notifier.NotifySessionCompleted(sessionContext, SessionContext); } // Déclenchement des événements // D'abord évenement hard var tmp = Completing; if (tmp != null) { tmp(this, new SessionCompletingEventArgs(sessionContext)); } } catch (Exception ex) { // Si une erreur survient dans une notification, on l'intercepte Log(new DiagnosticMessage(MessageType.Error, ex.Message, "SessionTerminated", SessionDataContext.InValidationProcess, null, ex)); } return(sessionContext); }