Migration de Microsoft Unity 1.2 vers 2.0 pour ERPStore

patterns & practices Developer Center

Unity 2.0 en version standalone vient est maintenant téléchargeable en version standalone sur cette page :

http://www.microsoft.com/downloads/details.aspx?FamilyId=2d24f179-e0a6-49d7-89c4-5b67d939f91b&displaylang=en

 

Je suis en train de migrer la plateforme eCommerce ERPStore qui utilisait Unity 1.2, je vais énumérer ici toutes les modifications que j’ai du mettre en place pour rendre ERPStore compatible avec Unity 2.0

Premier point interessant, Unity 2.0 integre dans son assembly le namespace Microsoft.Practices.ObjectBuilder2, ceci limite le nombre d’assembly a deployer.

Deuxieme point, la methode Resolve<> à été supprimée de l’interface IUnityContainer , et à été remplacée par une methode d’extension, il faut maintenant declarer un using Microsoft.Practices.Unity en lieu et place.

Si un fichier de configuration est utilisé pour le mapping, il faut convertir la section

<configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>

en

<configSections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>

Je n’ai eu que ça a modifier pour que ça refonctionne.

Au global , ce qui change (voir le ChangeLog ) :

  • Amélioration de l’API d’interception.
  • Nouvelle API d’injection
  • Dependances optionnelles
  • De nouveaux lifetime manager
  • Resolution tardive (très interessant)

var container = new UnityContainer();

var resolver = container.Resolve<Func<IMyService>>();

declaration du mapping

container.RegisterType<IMyService, MyService>();

IMyService service = resolver();

Aucun commentaire: