Il Core di Spring.NET offre, tramite l'interfaccia IResource, la possibilità di accedere a diverse tipologie di risorse in maniera polimorfica ed indipendente. Grazie a questa inferfaccia possiamo accedere ad un file di testo o ad un assembly nella stessa modalità. Per caricare le risorse possiamo utilizzare una implementazione dell'interfaccia IResourceLoader oppure nella maniera più pratica e veloce utilizzando il metodo GetResource dell'interfaccia IApplicationContext. La localizzazione della risorsa avviene trame URI (Uniform Resource Identifier), Spring.NET fornisce un insieme di schema aggiuntivi rispetto a quelli forniti dal .NET Framework tramite la classe URI, l'elenco completo è consultabile a questa pagina Built-in IResource implementations. Passiamo subito alla pratica creando un esempio che carica tre risorse di tipo, File, Http ed Assembly. Come prima cosa aggiungiamo un file di testo di nome TextFile.txt alla nostra solution ed impostiamo la Build Action su Embedded Resource, in fine nel Main scriviamo questo codice:
1: IApplicationContext _ctx = ContextRegistry.GetContext();
2:
3: IResource _resource1 = _ctx.GetResource("file:///C:/WINDOWS/ODBC.INI");
4: IResource _resource2 = _ctx.GetResource("http://blogs.ugidotnet.org/bmatte/Default.aspx");
5: IResource _resource3 = _ctx.GetResource("assembly://14.Resource/SpringSeries.Core.Resource/TextFile.txt");
6:
7: StreamReader _reader1 = new StreamReader(_resource1.InputStream);
8: Console.WriteLine(_reader1.ReadToEnd());
9:
10: StreamReader _reader2 = new StreamReader(_resource2.InputStream);
11: Console.WriteLine(_reader2.ReadToEnd());
12:
13: StreamReader _reader3 = new StreamReader(_resource3.InputStream);
14: Console.WriteLine(_reader3.ReadToEnd());
15:
16: Console.Read();
Sfruttando questa funzionalità possiamo separare la configurazione dell' IApplicationContext in uno o più file, molto utile se abbiamo definizioni diverse per l'abiente di produzione e quello di debug, basterà utilizzare la classe XmlApplicationContext in questo modo:
1: #if DEBUG
2: IApplicationContext _ctx = new XmlApplicationContext("file://debug-definition.xml");
3: #else
4: IApplicationContext _ctx = ContextRegistry.GetContext();
5: #endif
Technorati Tags:
Spring.NET