Overriding Existing Methods

As you can see in standard implementation, all methods are marked as virtual which means you can customize their content via overriding them.

You can override the existing methods to create a new class. To do that, newly created classes should inherit from RENInMemoryCacheService class:

public class MyCacheService : RENInMemoryCacheService
{
    public MyCacheService(IMemoryCache cache) : base(cache) { }

    public override async Task<T> GetAsync<T>(string cacheKey, CancellationToken cancellationToken = default)
    {
        Console.WriteLine("Getting custom...");
        //custom implementations
        return await base.GetAsync<T>(cacheKey, cancellationToken);
    }
}

Here, we overrided the existing method to expand it's functionality. From now on, we have register MyCacheService in Program.cs instead of standard registeration:

// builder.Services.RegisterRENCacheAccessHelpers<RENInMemoryCacheService>(); // SINCE WE ARE NOT USING STANDARD APPROACH ANYMORE
builder.Services.RegisterRENCacheAccessHelpers<MyCacheService>();

Since we are registering classes that inherits from IRENCacheService, we can use MyCacheService because we inherited from RENInMemoryCacheService which inherits from ICacheService interface!

And we may inject it to our classes as follows:

public class HomeController : ControllerBase
{
    private readonly IRENCacheService _customCacheService;
    private readonly IRENRepository<User> _userRepository;

    public HomeController(IRENUnitOfWork<RENDbContext> uow, IRENCacheService customCacheService)
    {
        _userRepository = uow.GetRENRepository<User>();
        _customCacheService = customCacheService;
    }

    [HttpGet]
    [Route("Index")]
    public async Task<IActionResult> Index()
    {
        var cacheKey = "users";
        var users = await _customCacheService.GetAsync<List<User>>(cacheKey);

        if (users != null) return Ok(users);
        users = await _userRepository.GetListAsync();
        await _customCacheService.SetAsync(cacheKey, users);

        return Ok(users);
    }
}

Last updated