Starts in:
2 DAYS
23 HRS
4 MIN
34 SEC
Starts in:
2 D
23 H
4 M
34 S
Open Closed

Not able to add event listener in constructor #8298


User avatar
0
Bryan-EDV created

Error messages

[10:59:10 INF] Executing endpoint '/signalr-hubs/messaging'
[10:59:11 ERR] Error when dispatching 'OnConnectedAsync' on hub.
Autofac.Core.DependencyResolutionException: An exception was thrown while activating Castle.Proxies.MessagingHubProxy -> Eduverse.WebRtc.CommunicationService.
 ---> Autofac.Core.DependencyResolutionException: An exception was thrown while invoking the constructor 'Void .ctor(Microsoft.Extensions.Logging.ILogger`1[Eduverse.WebRtc.CommunicationService], Eduverse.WebRtc.IWebRtcDispatcher, Eduverse.SpeechToText.ISpeechToText, Microsoft.Extensions.Options.IOptions`1[Eduverse.WebRtc.WebRtcOptions], Eduverse.DialogueManagers.IDialogueManagersAppService)' on type 'CommunicationService'.
 ---> System.InvalidOperationException: Method may only be called on a Type for which Type.IsGenericParameter is true.
   at System.RuntimeType.get_DeclaringMethod()
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
   --- End of inner exception stack trace ---
   at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate()
   at Autofac.Core.Activators.Reflection.ReflectionActivator.<>c__DisplayClass14_0.<UseSingleConstructorActivation>b__0(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Builder.RegistrationBuilder`3.&lt;&gt;c__DisplayClass41_0.&lt;PropertiesAutowired&gt;b__0(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, 
Action`1 next)
   --- End of inner exception stack trace ---
   at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, 
Action`1 next)
   at Autofac.Builder.RegistrationBuilder`3.&lt;&gt;c__DisplayClass35_0.&lt;OnPreparing&gt;b__0(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.Middleware.CoreEventMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid id, Func`1 creator)
   at Autofac.Core.Lifetime.LifetimeScope.CreateSharedInstance(Guid primaryId, Nullable`1 qualifyingId, Func`1 creator)
   at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next) 
   at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
   at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest& request)
   at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest& request)
   at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
   at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable`1 parameters)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider)
   at Microsoft.AspNetCore.SignalR.Internal.DefaultHubActivator`1.Create()
   at Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher`1.OnConnectedAsync(HubConnectionContext connection)
   at Microsoft.AspNetCore.SignalR.Internal.DefaultHubDispatcher`1.OnConnectedAsync(HubConnectionContext connection)
   at Microsoft.AspNetCore.SignalR.HubConnectionHandler`1.RunHubAsync(HubConnectionContext connection)
[10:59:11 INF] Executed endpoint '/signalr-hubs/messaging'

Code snippets: Communication Service injected into MessagingHub

[Authorize(Roles = DefaultRoleConsts.Learner)]
[DisableConventionalRegistration]
public class MessagingHub : AbpHub
{
    private readonly ILogger<MessagingHub> _logger;
    private readonly ICommunicationService _communicationService;

    public MessagingHub(
        ILogger<MessagingHub> logger,
        ICommunicationService communicationService,
        IUnitOfWorkManager unitOfWorkManager
    )
    {
        _logger = logger;
        _communicationService = communicationService;
    }

CommunicationService snippet

public class CommunicationService : ICommunicationService
{
    private readonly ILogger<CommunicationService> _logger;
    private readonly ISpeechToText _stt;
    private readonly IWebRtcDispatcher _dispatcher;
    private readonly IDialogueManagersAppService _dialogueManagersAppService;

    public CommunicationService(ILogger<CommunicationService> logger,
        IWebRtcDispatcher dispatcher,
        ISpeechToText stt,
        IOptions<WebRtcOptions> options,
        IDialogueManagersAppService dialogueManagersAppService)
    {
        _logger = logger;
        _dispatcher = dispatcher;
        _stt = stt;
        _dialogueManagersAppService = dialogueManagersAppService;


        // SetupHandler();
        _dialogueManagersAppService.OnChatResponseChunkReceived += (sender, evt) => {
            _dispatcher.GetWebRtcPeerConnectionFromConversationId(evt.ConversationId, out var peerConnection);
            if(peerConnection == null){
                _logger.LogError("PeerConnection not found for conversationId: {conversationId}", evt.ConversationId);
                return;
            }

            var message = new { type = "chatChunk", data = evt.Text };
            var jsonString = JsonSerializer.Serialize(message);
            peerConnection.SendData(jsonString);
        };

DialogueManager Snippet

[RemoteService(IsEnabled = false)]
    public class DialogueManagersAppService : EduverseAppService, IDialogueManagersAppService
    {
        protected IConversationLogRepository _conversationLogRepository;
        protected ConversationLogManager _conversationLogManager;
        protected IConversationRepository _conversationRepository;
        protected ConversationManager _conversationManager;
        protected IFeedbackLogRepository _feedbackLogRepository;
        protected FeedbackLogManager _feedbackLogManager;
        protected IScenarioRepository _scenarioRepository;
        private readonly IUnitOfWorkManager _unitOfWorkManager;
        protected ILlmService _llmService;
        public event EventHandler<ChatResponseChunkEventArgs>? OnChatResponseChunkReceived;
        public event EventHandler<ChatResponseEndedEventArgs>? OnChatResponseEnded;

3 Answer(s)
  • User Avatar
    0
    Anjali_Musmade created
    Support Team Support Team Member

    Hello ,

    Please check this link https://abp.io/support/questions/7463/Event-mechanism

    Thank you.

  • User Avatar
    0
    Bryan-EDV created

    Hi,

    I am aware of the local event bus. However would prefer to use the conventional EventHandler<TEventArgs> delegate to set up events as some other parts of our application has used those and we would like to ensure code consistency.

    Are you able to provide any insights as to why the dependency injection was failing?

    Thanks

  • User Avatar
    0
    liangshiwei created
    Support Team Fullstack Developer

    This is a dependency injection issue,

    first

    public class CommunicationService : ICommunicationService, ITransientDependency
    

    And reduce the services injected to trace the source of the problem

Made with ❤️ on ABP v9.1.0-preview. Updated on November 20, 2024, 13:06