Assim como o membership, roles, profile, webparts ou health monitoring, a versão 4.0 do ASP.NET também permitirá trabalhar com o caching seguindo essa mesma arquitetura, ou seja, através de provider models. Com isso, teremos uma maior flexibilidade para elegermos o nosso repositório de caching, que nem sempre será a memória do próprio servidor onde a aplicação está hospedada. Provavelmente será através deste recurso que a Microsoft irá acoplar o “Velocity” ao pipeline do ASP.NET.
Para customizar, tudo o que precisamos fazer é criar uma classe que herde da classe abstrata OutputCacheProvider, e sobrescrever os seus métodos autoexplicativos: Add, Get, Remove e Set, assim como é mostrado abaixo.
public class TextCacheProvider : OutputCacheProvider
{
private static readonly string PATH;
static TextCacheProvider()
{
PATH = HttpContext.Current.Server.MapPath(“~/CachedPages/”);
}
public override object Add(string key, object entry, DateTime utcExpiry) { }
public override object Get(string key) { }
public override void Remove(string key) { }
public override void Set(string key, object entry, DateTime utcExpiry) { }
}
Depois desta classe criada, que seguirá as regras de caching customizadas, precisamos configurá-la para poder ser utilizada, e para isso recorremos ao arquivo Web.config. Tudo o que precisamos fazer para que essa nova classe funcione, é acoplá-la a execução, definindo-a como sendo o provider padrão de caching. O trecho de código abaixo ilustra essa configuração:
<?xml version=”1.0″?>
<configuration>
<system.web>
<compilation debug=”true” targetFramework=”4.0″/>
<caching>
<outputCache defaultProvider=”TextCacheProvider” enableOutputCache=”true”>
<providers>
<clear/>
<add name=”TextCacheProvider” type=”TextCacheProvider”/>
</providers>
</outputCache>
</caching>
</configuration>
E se desejar escolher, em tempo de execução, um dos providers de acordo com uma condição específica, você poderá fazer isso através do método GetOutputCacheProviderName, que é exposto pela classe HttpApplication (Global.asax), e retorna uma string que representá o provider a ser utilizado.