Realizzare un sito in Silverlight 2.0: frontend e animazioni
di Alessio Leoncini, Marco Leoncini, in Silverlight 2.0, 27 novembre 2008
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(); }
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
Sullo stesso argomento
-
Applicazioni Silverlight con il cloud computing su Windows Azure
-
Aggiungere interattività al controllo Chart di Silverlight 3.0
-
Realizzare un sito completo in Silverlight: una galleria fotografica
-
Supporto audio e video in Silverlight 3.0
-
Effetti speciali sulle immagini in Silverlight 3.0
-
Anteprima di Expression Blend 3.0
-
Le novità di Silverlight 3.0 beta 1
-
Realizzare un menu riutilizzabile utilizzando DataTemplate e DataBinding
-
Un tocco di stile alle applicazioni Silverlight: style e template
-
Multithreading in Silverlight 2.0

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.