Realizzare un sito in Silverlight 2.0: frontend e animazioni

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

Creiamo una nuova classe che utilizzeremo per esporre il Servizio ADO.NET Data Services vero e proprio, chiamiamola FileManager, come accennato in precedenza, è necessario che le entità siano esposte come proprietà del tipo IQueryable, è inoltre indispensabile che ogni tipo non primitivo compreso tra i tipi  esposti dal servizio sia a sua volta esposto mediante una proprietà del tipo IQueryable.

Alla luce di questo la nostra classe FileManager espone tre proprietà, la prima Directories del tipo IQueryable<EasyShopGalleryDirectory>, la seconda ChildDirectories del tipo IQueryable<EasyShopGalleryChildDirectory> ed infine Files del tipo IQueryable<EasyShopGalleryFile>.

public IQueryable<EasyShopGalleryDirectory> Directories 
{ 
    get 
    { 
        #if RELEASE 
        if (!_context.User.Identity.IsAuthenticated) throw new DataServiceException(404, "Non si disponde dei diritti necessari a portare a termine l'operazione"); 
        #endif 
        DirectoryInfo[] _direcotryInfo = new DirectoryInfo(GalleryRootDirectory).GetDirectories(); 
 
        List<EasyShopGalleryDirectory> _list = new List<EasyShopGalleryDirectory>(); 
 
        for (int i = 0; i < _direcotryInfo.Length; i++) 
        { 
            _list.Add(new EasyShopGalleryDirectory(_direcotryInfo[i])); 
        } 
 
        return _list.AsQueryable(); 
    } 
}

Com'è possibile notare prima di restituire le cartelle controlliamo che l'utente sia autenticato, questa verifica è svolta utilizzando l'autenticazione Form integrata in asp.net.

Al fine di rendere disponibili operazioni di tipo CRUD sul File System attraverso ADO.NET Data Services è necessario che classe FileManager implementi l'interfaccia IUpdatable.

In particolare nel nostro caso dobbiamo fornire per prima cosa un'implementazione per i metodi: CreateResource e SetValue.

I due metodi servono principalmente per creare e reidratare le entità, operazioni svolte mediante reflection; avremo solo l'accortezza di salvare in una collezione le nuove entità così da eseguire le operazioni sul File System in un secondo momento.

public object CreateResource(string containerName, string fullTypeName) 
{ 
    IFileIfoAccessor _createdObject = Activator.CreateInstance(Type.GetType(fullTypeName)) as IFileIfoAccessor; 
 
    if (_createdObject != null) 
    { 
        _newDirectories.Add(_createdObject); 
    } 
    return _createdObject; 
} 
 
public void SetValue(object targetResource, string propertyName, object propertyValue) 
{ 
    PropertyInfo _propertyInfo = targetResource.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public); 
    if (_propertyInfo.CanWrite) 
    { 
        _propertyInfo.SetValue(targetResource, propertyValue, null); 
    } 
}

Forniremo inoltre l'implementazione per i metodi GetResource, DeleteResource, AddReferenceToCollection e SaveChanges.

Nel metodo GetResource ci limiteremo a restituire il primo elemento dell'oggetto IQueryable che viene passato come argomento allo stesso.

Come lascia intuire il nome, il metodo DeleteResource è richiamato quando il servizio richiede l'eliminazione di un'entità.

Il metodo AddReferenceToCollection è richiamato quando aggiungiamo alla collezione Directories dell'oggetto EasyShopGalleryDirectory  un oggetto del tipo EasyShopGalleryChildDirectory, nel nostro caso sarà utile per comporre il percorso completo della sottocartella da creare.

Nel metodo SavaChanges, previa verifica dell'autenticazione, salveremo nel File System le entità create in precedenza.

public void SaveChanges() 
{ 
# if RELEASE 
    if (!_context.User.Identity.IsAuthenticated) throw new DataServiceException(404, "Non si disponde dei diritti necessari a portare a termine l'operazione"); 
#endif 
    foreach (IFileIfoAccessor item in _newDirectories) 
    { 
        try 
        { 
            string _fullPath = Path.Combine(GalleryRootDirectory, item.Path); 
 
            if (!_fullPath.StartsWith(GalleryRootDirectory)) throw new FileNotFoundException("Path not valido"); 
 
            DirectoryInfo _info = Directory.CreateDirectory(_fullPath); 
 
            item.DirectoryInfo = _info; 
        } 
        catch (Exception Exception) { throw new DataServiceException("Impossibile terminare l'operazione", Exception); } 
    } 
    _newDirectories.Clear(); 
}

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

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.



Segnala su: Facebook MSDN Social Twitter Segnalo Wikio Diggita Technorati Stumbleupon Google Yahoo FriendFeed Delicious Furl

TUTORIALS
TOP TEN ARTICOLI
ARTICOLI VIA E-EMAIL

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

MEDIA
IN EVIDENZA
MISC