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
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà
Utilità
Stampa
Download



