$class */ public function register(string $slug, mixed $class): void { parent::register($slug, $class); } public function resolve(?string $slug = null): WeatherProviderInterface { $slug ??= Setting::get('weather_provider', self::DEFAULT_PROVIDER); if (! $this->has($slug)) { $slug = self::DEFAULT_PROVIDER; } return $this->container->make($this->items[$slug]); } /** * @return array slug => provider info */ public function availableProviders(): array { $result = []; foreach ($this->all() as $slug => $class) { $provider = $this->container->make($class); $result[$slug] = [ 'name' => $provider->name(), 'requires_api_key' => $provider->requiresApiKey(), ]; } return $result; } public function activeSlug(): string { $slug = Setting::get('weather_provider', self::DEFAULT_PROVIDER); return $this->has($slug) ? $slug : self::DEFAULT_PROVIDER; } }