# IAssetProvider

> The base capability shared by asset providers in the localization system.

## Definition

* **Type:** Interface
* **Namespace:** [Unity.Localization.Providers](/engine/6000.7/script-reference/unity/localization/providers.md)
* **Assembly:** UnityEngine.LocalizationRuntimeModule

```csharp
public interface IAssetProvider
```

## Remarks

A provider decides how an address resolves to an asset, for example from built content, a Resources folder, or Addressables. It opts into loading by implementing [IAsyncAssetProvider](/engine/6000.7/script-reference/unity/localization/providers/iasyncassetprovider.md), [ISynchronousAssetProvider](/engine/6000.7/script-reference/unity/localization/providers/isynchronousassetprovider.md), or both; the localization system prefers the asynchronous version and falls back to the synchronous one, and on the synchronous paths it uses only synchronous providers. Add an implementation to an [AssetProvider](/engine/6000.7/script-reference/unity/localization/providers/assetprovider.md) chain to make it available. The built-in implementations are [ReferencedAssetProvider](/engine/6000.7/script-reference/unity/localization/providers/referencedassetprovider.md) (synchronous) and [ResourceFolderProvider](/engine/6000.7/script-reference/unity/localization/providers/resourcefolderprovider.md) (both).

Additional Resources: [IAsyncAssetProvider](/engine/6000.7/script-reference/unity/localization/providers/iasyncassetprovider.md), [ISynchronousAssetProvider](/engine/6000.7/script-reference/unity/localization/providers/isynchronousassetprovider.md), [AssetProvider](/engine/6000.7/script-reference/unity/localization/providers/assetprovider.md), [AssetKey](/engine/6000.7/script-reference/unity/localization/providers/assetkey.md)

A synchronous provider that resolves assets it already holds in memory.

## Examples

```csharp
using System.Collections.Generic;
using Unity.Localization.Providers;
using Object = UnityEngine.Object;

namespace Unity.Localization.Samples
{
    public class SyncAssetProviderExample : IAssetProvider, ISynchronousAssetProvider
    {
        readonly Dictionary<string, Object> m_Assets = new();

        public void Register(string address, Object asset) => m_Assets[address] = asset;

        public bool TryLoadAsset<T>(AssetKey key, out T asset) where T : Object
        {
            asset = m_Assets.TryGetValue(key.Address, out var value) ? value as T : null;
            return asset != null;
        }

        public void Release(Object asset) { }
    }
}
```

## Properties

| Property                                                                                | Description                                                                 |
| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| [Id](/engine/6000.7/script-reference/unity/localization/providers/iassetprovider/id.md) | The identifier a table collection uses to name the provider that serves it. |

## Methods

| Method                                                                                            | Description                                             |
| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
| [Release](/engine/6000.7/script-reference/unity/localization/providers/iassetprovider/release.md) | Releases an asset previously returned by this provider. |
