tenantService ??= new TenantService( $this->createTenantRepository(), $this->createDepartmentRepository(), $this->createDirectorySettingsGateway(), $this->auditRecorder ); } public function createDepartmentService(): DepartmentService { return $this->departmentService ??= new DepartmentService( $this->userServicesFactory, $this->createDepartmentRepository(), $this->createDirectorySettingsGateway(), $this->directoryGatewayFactory->getTenantScopeService(), $this->auditRecorder ); } public function createRoleService(): RoleService { return $this->roleService ??= new RoleService( $this->createRoleRepository(), $this->createDirectorySettingsGateway(), $this->auditRecorder ); } // Passthrough accessors so callers only need a reference to this factory, not the sub-factories. public function createTenantRepository(): TenantRepositoryInterface { return $this->directoryRepositoryFactory->createTenantRepository(); } public function createDepartmentRepository(): DepartmentRepositoryInterface { return $this->directoryRepositoryFactory->createDepartmentRepository(); } public function createRoleRepository(): RoleRepositoryInterface { return $this->directoryRepositoryFactory->createRoleRepository(); } public function createDirectorySettingsGateway(): DirectorySettingsGateway { return $this->directoryGatewayFactory->createDirectorySettingsGateway(); } public function getTenantScopeService(): TenantScopeService { return $this->directoryGatewayFactory->getTenantScopeService(); } }