Mardi 10 juin 2008

Avant d'aller plus loin, pour ceux qui ne connaisent pas Unity Application Block, je vous renvoit vers mon post de Présentation d'Unity Application Block.

J'ai été confronté aujourd'hui à une problématique qui était de gérer un service générique. Nous utiliserons dans ce post pour exemple l'interface du service  IServiceGenerique
<T, U> avec son implémentation MonServiceGenerique
<T, U>.
Nous utilisions alors toujours la version 1.0 d'Unity Application Block (grosse erreur !) et en faisant le code suivant pour récupérer nos services (en mode singleton via le "ContainerControlledLifetimeManager") :

container.Resolve<IServiceGenerique<ClassA, ClassB
>>();
container.Resolve<IServiceGenerique<ClassA, ClassA>>();

Unity nous récupérait alors bien le premier service IServiceGenerique<ClassA, ClassB> mais lors du deuxième Resolve, unity nous renvoyait toujours le IServiceGenerique<ClassA, ClassB> au lieu du IServiceGenerique<ClassA, ClassA> !

En faisant ensuite une recherche sur internet, c'était effectivement un bug d'unity v 1.0 qui a été corrigé avec unity 1.1. Si vous utilisez Unity, je vous conseille donc vivement de mettre à jour vos dépendances en récupérant
Unity V 1.1.

Avec Unity 1.1, le code suivant  (toujours en mode singleton) :

container.Resolve<IServiceGenerique<ClassA, ClassB>>();
container.Resolve<IServiceGenerique<ClassA, ClassA
>>();
container.Resolve<IServiceGenerique<ClassA, ClassA
>>();
container.Resolve<IServiceGenerique<ClassB, ClassA
>>();

nous retournera 3 instances de type IServiceGenerique<ClassA, ClassB>, IServiceGenerique<ClassA, ClassA> et IServiceGenerique<ClassB, ClassA>.

Pour information pour configurer l'enregistrement de votre type générique, voici la config unity :

<type type="UAB.Demo.Interfaces.IServiceGenerique`2, UAB.Demo.Interfaces" mapTo="UAB.Demo.Services.MonServiceGenerique`2, UAB.Demo.Services">
<
lifetime type="singleton" />
</
type>

Pour une classe générique avec un seul type et non deux, remplacez le '2 par '1 etc...

 

Par DotNet Dev - Publié dans : MS Application Blocks - Communauté : Microsoft .NET
Ecrire un commentaire - Voir les commentaires - Recommander
Retour à l'accueil

Partenaires

Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus