Creazione di una funzionalità custom basata sui provider

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Implementare i provider: XML

Scrivere un secondo provider che memorizzi il tutto su un file XML non si discosta molto da quanto fatto per Access. L'unica differenza sta nel parametro fileName che viene utilizzato nell'ambito del metodo di inizializzazione della classe XmlAzSeachProvider.

_filename = config["fileName"];
if (string.IsNullOrEmpty(_filename))
  throw new ProviderException("Missing fileName string");
config.Remove("fileName");

Ora che abbiamo anche il secondo provider, lo possiamo includere nel web.config.

<?xml version="1.0"?>
<configuration>
  <configSections>
    <sectionGroup name="system.web">
      <section name="AzSearchService" type="AzSearchServiceSection" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
    </sectionGroup>
  </configSections>
  <system.web>
    <AzSearchService defaultProvider="AccessAzSearchProvider" caseSensitive="true">
      <providers>
        <add name="AccessAzSearchProvider" type="AccessAzSearchProvider" connectionString="database.mdb"/>
        <add name="XmlAzSearchProvider" type="XmlAzSearchProvider" fileName="words.xml" />
      </providers>
    </AzSearchService>
  </system.web>
</configuration>

Possiamo decidere in qualsiasi momento quale provider utilizzare modificando semplicemente il contenuto dell'attributo defaultProvider.

La classe che utilizza i provider

Per completare l'opera manca il collante per tutto il codice scritto finora. Mancano in particolare le funzioni che permettono al nostro codice di poter memorizzare le parole chiave e di vedere se e quante volte queste parole sono state usate per la ricerca.

Per ottenere questo è sufficiente scrivere la classe statica AzSearch come segue.

using System;
using System.Web;
using System.Web.Configuration;
using System.Configuration;
using System.Configuration.Provider;
using System.Text;

public class AzSearch
{
  private static AzSearchProvider _provider = null;
  private static AzSearchProviderCollection _providers = null;
  private static object _lock = new object();

  public static AzSearchProvider Provider
  {
    get { return _provider; }
  }

  public static AzSearchProviderCollection Providers
  {
    get { return _providers; }
  }

  public static int Viewed(string word)
  {
    LoadProviders();
    return _provider.Viewed(word);
  }

  public static void Memorize(string word)
  {
    LoadProviders();
    _provider.Memorize(word);
  }

  private static void LoadProviders()
  {
    if (_provider == null)
    {
      lock (_lock)
      {
        if (_provider == null)
        {
          AzSearchServiceSection section = (AzSearchServiceSection)
            WebConfigurationManager.GetSection("system.web/AzSearchService");

          _providers = new AzSearchProviderCollection();
          ProvidersHelper.InstantiateProviders(section.Providers, _providers, typeof(AzSearchProvider));
          _provider = _providers[section.DefaultProvider];
          _provider.CaseSensitive = section.CaseSensitive;

          if (_provider == null)
            throw new ProviderException("Unable to load default AzSearchProvider");
        }
      }
    }
  }
}

4 pagine in totale: <<Indietro 1 2 [3] 4 Avanti >>

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC