# Feature Usage

## Feature usage in Controllers

Stats are collected automatically when a feature is evaluated, but using is different than being available. To mark a controller or controller method to count as active use of a feature (for usage reporting) just add the FeatureUsage attribute

```csharp
[FeatureGate(FeatureFlags.Users)]
[FeatureUsage(FeatureFlags.Users)]
[Route("users")]
[Controller]
public class UsersController : Controller
{
    ...
}
```

{% hint style="warning" %}
The FeatureUsage attribute needs to be declared after the FeatureGate attribute, otherwise, usage will be counted even if the action isn't allowed by the FeatureGate flag, resulting in incorrect reporting
{% endhint %}

## Feature usage Ad-Hoc

Feature usage can also be reported manually through the `IFeatureUsageStatsProvider` interface

```csharp
public class AccountController : Controller
{
    private readonly IFeatureUsageStatsProvider _usageService;

    public AccountController(IFeatureUsageStatsProvider usageService)
    {
        _usageService = usageService;
    }

    public IActionResult SignIn()
    {
        _usageService.RecordUsageAsync("SignIn");
            
        return View();
    }
}
```
