> For the complete documentation index, see [llms.txt](https://dev.ucommerce.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dev.ucommerce.net/readme/extensions/change-service-behavior.md).

# Changing Service Behavior

A service is a class with reusable logic that will be leveraged across the system, for example, in multiple pipelines. Changing the behavior of a service means applying this behavior platform-wide.

For example, customizing the `ITaxService` will change how taxes are calculated for shipments, payments, products, and order lines.

All services are registered in the IoC container, so it is easy to overwrite them.

## Implementing a Service

Once the service to change is identified, create a new class and either implement the interface or inherit from the existing implementation.

* Implementing the interface requires writing a full implementation.
* Inheriting an existing implementation allows for overriding only parts of an existing implementation, where applicable.

### Implementing the Interface

```csharp
 public class CustomXService: IXService
    {
        public Task<XReturn> XMethod(.., CancellationToken token)
        {
            // Custom implementation
            return xReturn;
        }
    }
```

### Inheriting an Existing Implementation

If `XService` has multiple methods, and only one needs to be overridden, it can be done by inheriting the default implementation and selecting which methods to override.

{% hint style="info" %}
It is possible to call the base method from the custom code using

`"base.Xmethod(..);"`
{% endhint %}

```csharp
public class CustomXService: XService
    {
        public override Task<XReturn> XMethod(.., CancellationToken token)
        {
            // Custom implementation
            // Possible to call base.Xmethod(.., token) from custom code.
            return xReturn;
        }
    }
```

### Registering the Custom Service Implementation

```csharp
builder.Services.AddUcommerce(builder.Configuration)
    // ... register other Ucommerce components first
    .Build();
builder.Services.AddUnique<IXService, CustomXService>();
```
