Invest in people before investing in tools

Il blog di Matteo Baglini
posts - 118, comments - 95, trackbacks - 697

[Spring.NET #8]Spring.Core, Constructor Argument Resolution via Type Matching

In un post precedente abbiamo visto come instanziare un oggetto tramite il suo costruttore di default, quindi privo di paremetri, con Spring.NET possiamo anche creare oggetti che hanno un costruttore parametrico. La particolarietà sta nel fatto che possiamo valorizzare i parametri direttamente nel file di configurazione. Supponiamo di avere una classe Person definità così:

   1: public class Person
   2: {
   3:     private string _firstName;
   4:     private short _age;
   5:  
   6:     public string FirstName
   7:     {
   8:         get { return _firstName; }
   9:         set { _firstName = value; }
  10:     }
  11:  
  12:     public short Age
  13:     {
  14:         get { return _age; }
  15:         set { _age = value; }
  16:     }
  17:  
  18:     public Person(string firstName, short age)
  19:     {
  20:         _firstName = firstName;
  21:         _age = age;
  22:     }
  23: }

Per indicare a Spring.NET quali valori attribuire ai due parametri utilizziamo il tag constructor-arg, il quale supporta più modalità per svolgere il suo compito, in questo post vedremo la valorizzazione tramite Type Matching, vediamo subito come impostare il file di configurazione:

<object id="Matteo" 
        type="SpringSeries.Core.TypeMatching.Person, 06.TypeMatching">
  <constructor-arg type="System.String" value="Matteo" />
  <constructor-arg type="System.Int16" value="24" />
</object>

tramite i due attributi type e value indichiamo rispettivamente il tipo ed il valore del parametro, quando richiamiamo l'oggetto via codice:

   1: Person _person = (Person)_ctx.GetObject("Matteo");

Spring.NET effettuerà un matching dei tipi per capire a quale parametro attribuire il valore impostato, in questo caso cercherà il tipo string per attribuire il valore Matteo e il tipo short per il valore 24. Per verificare il funzionamento come al solito basta stampare a video le proprietà:

1: Console.WriteLine(_person.FirstName);

   2: Console.WriteLine(_person.Age);

Domanda: cosa succede se nel costruttore ci sono più tipi uguali? In questo caso Spring.NET utilizza l'ordine di definizione dei tag constructor-arg per capire quale parametro valorizzare, per esmpio se la nostra classe Person dichiara un terzo parametro lastName di tipo string dobbiamo modificare il file Xml così:

<object id="Matteo2"
        type="SpringSeries.Core.TypeMatching.Person2, 06.TypeMatching">
  <constructor-arg type="System.String" value="Matteo" />
  <constructor-arg type="System.String" value="Baglini" />
  <constructor-arg type="System.Int16" value="24" />
</object>
Technorati Tags:

Print | posted on sabato 15 settembre 2007 22:33 | Filed Under [ .NET OpenSource Spring.NET ]

Powered by:
Powered By Subtext Powered By ASP.NET