- 
                Notifications
    You must be signed in to change notification settings 
- Fork 164
Quickstart
        Karan Kumar edited this page Nov 30, 2020 
        ·
        10 revisions
      
    NOTE: This quickstart is for LazyCache version 2.x
Add LazyCache to your project
dotnet add MyProject package LazyCacheCreate a cache an use it:
//Create my cache manually
IAppCache cache = new CachingService();
// define a func to get the products but do not Execute() it
Func<IEnumerable<Product>> productGetter = () => dbContext.Products.ToList();
// Either get the results from the cache based on a unique key, or 
// execute the func and cache the results
var productsWithCaching = cache.GetOrAdd("HomeController.Get", productGetter);
// use the cached results
System.Console.WriteLine($"Found {productsWithCaching.Count} products");LazyCache is designed for dependency injection and has support for the IoC container Microsoft.Extensions.DependencyInjection in the LazyCache.AspNetCore project. Add LazyCache.AspNetCore to your project (LazyCache.AspNetCore has a dependency on LazyCache so that will get installed automatically if not already)
dotnet add MyProject package LazyCache.AspNetCoreAdd the LazyCache services in your aspnet core Startup.cs
 // This method gets called by the runtime. Use this method to add services.
public void ConfigureServices(IServiceCollection services)
{
    // already existing registrations
    services.AddMvc();
    services.AddDbContext<MyContext>(options => options.UseSqlServer("some db"));
    ....
    // Register LazyCache - makes the IAppCache implementation
    // CachingService available to your code
    services.AddLazyCache();
}Take IAppCache as a dependency in the constructor of the class in which you want to use it
 public class HomeController : Controller
{
    private readonly IAppCache cache;
    private readonly ProductDbContext dbContext;
    public HomeController(ProductDbContext dbContext, IAppCache cache)
    {
        this.dbContext = dbContext;
        this.cache = cache;
    }Wrap the call you want to cache in a lambda and use the cache:
[HttpGet]
[Route("api/products")]
public IEnumerable<Product> Get()
{
    // define a func to get the products but do not Execute() it
    Func<IEnumerable<Product>> productGetter = () => dbContext.Products.ToList();
    // get the results from the cache based on a unique key, or 
    // execute the func and cache the results
    var productsWithCaching = cache.GetOrAdd("HomeController.Get", productGetter);
    return productsWithCaching;
}