app->bind(CommunicationServiceContract::class, CommunicationService::class); $this->app->bind(RecipientPreviewServiceContract::class, RecipientPreviewService::class); $this->app->bind(RecipientDedupeServiceContract::class, RecipientDedupeService::class); $this->app->bind(CommunicationPreferencePolicyContract::class, DefaultCommunicationPreferencePolicy::class); $this->app->bind(ChannelRouterContract::class, ChannelRouter::class); $this->app->bind(EmailChannelContract::class, EmailChannel::class); $this->app->bind(SmsChannelContract::class, SmsChannel::class); $this->app->bind(WhatsAppChannelContract::class, WhatsAppChannel::class); $this->app->bind(NotificationChannelContract::class, NotificationChannel::class); $this->app->bind(MessageTemplateServiceContract::class, MessageTemplateService::class); $this->app->bind(DeliveryStatusServiceContract::class, DeliveryStatusService::class); $this->app->bind(CommunicationAuditLoggerContract::class, CommunicationAuditLogger::class); $this->app->bind(CommunicationIdempotencyServiceContract::class, CommunicationIdempotencyService::class); $this->app->tag([StudentRecipientResolver::class,GuardianRecipientResolver::class,StaffRecipientResolver::class,ClassRecipientResolver::class,SchoolWideRecipientResolver::class], 'communication.recipient_resolvers'); $this->app->when(RecipientPreviewService::class)->needs('$resolvers')->giveTagged('communication.recipient_resolvers'); } }