# ServiceProvider

Roblox Engine API class from Roblox Studio 0.744.0.7441077 (version-7aaa6838d36c4448).

- Inherits from, nearest first: [Instance](https://rapi.sleaze.dev/classes/Instance.md), [Object](https://rapi.sleaze.dev/classes/Object.md)
- Subclasses: [DataModel](https://rapi.sleaze.dev/classes/DataModel.md), [GenericSettings](https://rapi.sleaze.dev/classes/GenericSettings.md)
- Tags: Not browsable, Not creatable
- Memory category: Instances
- HTML page: https://rapi.sleaze.dev/classes/ServiceProvider/
- Roblox documentation: https://create.roblox.com/docs/reference/engine/classes/ServiceProvider

A ServiceProvider is an abstract class, which stores, and provides certain singleton classes, depending on what inherited class you are using its members with.

## Methods

### FindService

```luau
ServiceProvider:FindService(className: string): Instance
```

- Tags: Thread safe

Returns the service specified by the given className if it's already created, errors for an invalid name.

Parameters:

- `className`: The class name of the service to find.

Returns: The service instance if it has already been created, or nil if the service does not yet exist.

### GetService

```luau
ServiceProvider:GetService(className: string): Instance
```

Returns the service with the requested class name, creating it if it does not exist.

Parameters:

- `className`: The class name of the requested service.

Returns: An instance of the requested service.

### getService

```luau
ServiceProvider:getService(className: string): Instance
```

- Tags: Deprecated
- Use instead: [`ServiceProvider.GetService`](https://rapi.sleaze.dev/classes/ServiceProvider.md)

**Deprecated:** This deprecated function is a variant of [`ServiceProvider:GetService()`](https://rapi.sleaze.dev/classes/ServiceProvider.md) which should be used instead.

### service

```luau
ServiceProvider:service(className: string): Instance
```

- Tags: Deprecated
- Use instead: [`ServiceProvider.GetService`](https://rapi.sleaze.dev/classes/ServiceProvider.md)

**Deprecated:** This item has been superseded by [`ServiceProvider:GetService()`](https://rapi.sleaze.dev/classes/ServiceProvider.md) which should be used in all new work.

## Events

### Close

```luau
ServiceProvider.Close: RBXScriptSignal<()>
```

Fires when the current place is exited.

### CloseLate

```luau
ServiceProvider.CloseLate: RBXScriptSignal<()>
```

- Tags: Local user security

### ServiceAdded

```luau
ServiceProvider.ServiceAdded: RBXScriptSignal<(service: Instance)>
```

Fired when a service is created.

### ServiceRemoving

```luau
ServiceProvider.ServiceRemoving: RBXScriptSignal<(service: Instance)>
```

Fired when a service is about to be removed.

## Inherited members

- From [Instance](https://rapi.sleaze.dev/classes/Instance.md): `Archivable`, `archivable`, `Attributes`, `AttributesReplicate`, `AttributesSerialize`, `HistoryId`, `Name`, `Parent`, `PredictionMode`, `PropertyStatusStudio`, `RobloxLocked`, `SerializedOverrides`, `SourceAssetId`, `Tags`, `UniqueId`, `numExpectedDirectChildren`, `DataCost`, `Capabilities`, `DefinesCapabilities`, `IsInSandbox`, `Sandboxed`, `AddTag`, `ClearAllChildren`, `Clone`, `Destroy`, `FindFirstAncestor`, `FindFirstAncestorOfClass`, `FindFirstAncestorWhichIsA`, `FindFirstChild`, `FindFirstChildOfClass`, `FindFirstChildWhichIsA`, `FindFirstDescendant`, `GetActor`, `GetAttribute`, `GetAttributeChangedSignal`, `GetAttributes`, `GetChildren`, `GetDebugId`, `GetDescendants`, `GetFullName`, `GetStyled`, `GetStyledPropertyChangedSignal`, `GetTags`, `HasTag`, `IsAncestorOf`, `IsDescendantOf`, `IsPropertyModified`, `QueryDescendants`, `RemoveTag`, `ResetPropertyToDefault`, `SetAttribute`, `WaitForChild`, `Remove`, `children`, `clone`, `destroy`, `findFirstChild`, `getChildren`, `isDescendantOf`, `remove`, `AncestryChanged`, `AttributeChanged`, `ChildAdded`, `ChildRemoved`, `DescendantAdded`, `DescendantRemoving`, `Destroying`, `StyledPropertiesChanged`, `childAdded`
- From [Object](https://rapi.sleaze.dev/classes/Object.md): `ClassName`, `className`, `GetPropertyChangedSignal`, `IsA`, `isA`, `Changed`
