La version 1.0 de Unity est disponible sur Codeplex depuis vendredi. Au menu, un projet au code source ouvert aux regards qui permet de construire ses objets par injection des dépendances. Au final, quelque chose d'assez proche de Castle Windsor dans les grandes lignes, mieux documenté que les autres projets du groupe Pattern & Practices de Microsoft.
Les dépendances y sont spécifiées soit par attributs (ce qui entraine une dépendance souvent indésirable entre les classes et le container Unity) soit par fichier de configuration soit encore de façon dynamique dans le code.
Pour fixer les idées, voilà un fichier de config minimal :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity"
type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,
Microsoft.Practices.Unity.Configuration" />
</configSections>
<unity>
<containers>
<container>
<types>
<type type="UnitySamples.ILogger,UnitySamples"
mapTo="UnitySamples.ConsoleLogger,UnitySamples"
lifetime="Singleton"/>
</types>
</container>
</containers>
</unity>
</configuration>
Et un exemple d'injection plus complexe via le constructeur, un setter et une méthode :
<type type="IMyService" mapTo="MyDataService" name="DataService">
<typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement,
Microsoft.Practices.Unity.Configuration">
<constructor>
<param name="connectionString" parameterType="string">
<value value="AdventureWorks"/>
</param>
<param name="logger" parameterType="ILogger">
<dependency />
</param>
</constructor>
<property name="Logger" propertyType="ILogger" />
<method name="Initialize">
<param name="connectionString" parameterType="string">
<value value="contoso"/>
</param>
<param name="dataService" parameterType="IMyService">
<dependency />
</param>
</method>
</typeConfig>
</type>
Certains douteront surement de l'intérêt de sortir un nième container IoC quelques années après les pionniers Spring.Net et Castle (et d'autres... Cf. liens ci-dessous), d'autres argueront qu'à qualités égales, mieux vaut choisir la solution supportée par une grosse structure.
Mais pour juger de la différence de qualité et de fonctionnalité il faut mettre en oeuvre et comparer. Un bon article de Matthew Podwysocki (membre de ALT.NET) amorce la comparaison : http://weblogs.asp.net/podwysocki/archive/2008/02/26/ioc-and-the-unity-application-block-once-again.aspx
Liens :
Les commentaires récents