Nel post precedente ho parlato dell'interfaccia IMessageSource e della sua implementazione più semplice, StaticMessageSource. In questo post invece vedremo la più utile implementazione ResourceSetMessageSource, la quale permette di leggere le risorse in maniera localizzata da file .resx direttamente con l' ApplicationContext, definendo il funzionamento tramite il file di configurazione. Come di consueto creiamo una Console Application ed in seguito aggiungiamo due file di risorse di nome AppRescource.resx ed AppResource.en-US.resx, nel primo inseriamo, utilizzando come chiave la stringa "HelloMessage", la frase localizzata in italiano, nel secondo invece, sempre con la solita chiave, inseriamo la frase localizzagta in inglese. Adesso aggiungendo un file di configurazione dell'applicazione (App.config), proseguiamo inserendo la definizione dell'assembly contenente i file di risorse:
<object name="myResourceManager"
type="Spring.Objects.Factory.Config.ResourceManagerFactoryObject, Spring.Core">
<property name="baseName" value="SpringSeries.Core.ResourceSetMessageSource.AppResource" />
<property name="assemblyName" value="20.ResourceSetMessageSource" />
</object>
per accedere alle risorse definite dobbiamo definire uno o più ResourceManager indicandoli tramite il tag List:
<object name="messageSource" type="Spring.Context.Support.ResourceSetMessageSource, Spring.Core">
<property name="resourceManagers">
<list>
<ref object="myResourceManager" />
</list>
</property>
</object>
quanfo richiederemo una risorsa tramite la sua chiave Spring.NET si occupera di effettuare il search all'interno di tutti i ResourceManager definiti. In fine non resterà altro che creare il nostro ApplicationContext e richedere la risorsa con i metodi di IMessageSource: