# SubsystemWithProvider

> A subsystem is initialized from a SubsystemDescriptorWithProvider for a given subsystem (Session, Plane, Face, etc.) and provides an interface to interact with that given subsystem until it is Destroyed. After a subsystem is created, it can be Started or Stopped to turn on and off functionality and preserve performance. The base type for the subsystem only exposes this functionality; this class is designed to be a base class for derived classes that expose more functionality specific to a given subsystem. Note: Initializing a second subsystem from the same subsystem descriptor will return a reference to the existing subsystem, because only one subsystem is currently allowed for a single subsystem provider.

## Definition

* **Type:** Class
* **Namespace:** [UnityEngine.SubsystemsImplementation](/engine/6000.0/script-reference/unityengine/subsystemsimplementation.md)
* **Assembly:** UnityEngine.SubsystemsModule
* **Implements:** [ISubsystem](/engine/6000.0/script-reference/unityengine/isubsystem.md)

```csharp
public abstract class SubsystemWithProvider : ISubsystem
```

## Properties

| Property                                                                                                         | Description                              |
| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
| [running](/engine/6000.0/script-reference/unityengine/subsystemsimplementation/subsystemwithprovider/running.md) | Whether or not the subsystem is running. |

## Methods

| Method                                                                                                           | Description                            |
| ---------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| [Destroy](/engine/6000.0/script-reference/unityengine/subsystemsimplementation/subsystemwithprovider/destroy.md) | Destroys this instance of a subsystem. |
| [Start](/engine/6000.0/script-reference/unityengine/subsystemsimplementation/subsystemwithprovider/start.md)     | Starts an instance of a subsystem.     |
| [Stop](/engine/6000.0/script-reference/unityengine/subsystemsimplementation/subsystemwithprovider/stop.md)       | Stops an instance of a subsystem.      |
