permissionRepository ??= new PermissionRepository(); } public function createRolePermissionRepository(): RolePermissionRepository { return $this->rolePermissionRepository ??= new RolePermissionRepository(); } public function createUserRoleRepository(): UserRoleRepository { return $this->userRoleRepository ??= new UserRoleRepository(); } public function createPermissionService(): PermissionService { return $this->permissionService ??= new PermissionService( $this->createPermissionRepository(), $this->createRolePermissionRepository(), $this->createUserRoleRepository() ); } public function createPermissionGateway(): PermissionGateway { return $this->permissionGateway ??= new PermissionGateway($this->createPermissionService()); } }