Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

[EntLib4] déclaration des objets avec Unity


Sujet :

Dotnet

  1. #1
    Membre régulier
    [EntLib4] déclaration des objets avec Unity
    Bonjour,

    J'ai découvert que EntLib4 avait rattrapé Spring.Net avec l'Injecteur de dépendances "Unity".
    J'ai fait un essais concluant, juste que la syntaxe des déclarations m'échappe un peu.

    En fait je me demande pourquoi les objets sont déclarés dans la section "types" et pas dans la section "instances" ?? Du coup je trouve le schéma de Unity bien plus compliqué que celui de Spring.Net

    Je n'ai surement pas tout compris, c'est pourquoi je pose la question ici.

    Voici le bout de xml et le bout de code C# qui fonctionne ;

    Le bloque de déclaration dans App.config:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
      <unity>
        <containers>
          <container>
            <types>
              <type type="UnityTest01.IVehicule, UnityTest01" mapTo="UnityTest01.Moto, UnityTest01" name="uneMoto" />
              <type type="UnityTest01.IVehicule, UnityTest01" mapTo="UnityTest01.Voiture, UnityTest01" name="uneVoiture" />
     
              <type type="UnityTest01.Coursier, UnityTest01" mapTo="UnityTest01.Coursier, UnityTest01" name="Marcel">
                <typeConfig >
                  <property name="Vehicule" propertyType="UnityTest01.IVehicule, UnityTest01">
                    <dependency name="uneVoiture" />
                  </property>
                </typeConfig>
              </type>
     
              <type type="UnityTest01.Coursier,UnityTest01" mapTo="UnityTest01.Coursier, UnityTest01" name="Antoine">
                <typeConfig >
                  <property name="Vehicule" propertyType="UnityTest01.IVehicule,UnityTest01">
                    <dependency name="uneMoto" />
                  </property>
                </typeConfig>
              </type>
            </types>
     
            <instances>
            </instances>
     
          </container>
        </containers>
      </unity>


    Le code pour instancier le bazar :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
                UnityContainer container = new UnityContainer();
     
                UnityConfigurationSection section
                  = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
                section.Containers.Default.Configure(container);
     
                Coursier coursierMarcel = container.Resolve<Coursier>("Marcel") as Coursier;
                Debug.WriteLine("coursierMarcel.Vehicule.WheelsCount: " + coursierMarcel.Vehicule.WheelsCount);
                this.textBox1.AppendText(String.Format("Marcel est équipé d'un véhicule à {0} roues.", coursierMarcel.Vehicule.WheelsCount) + Environment.NewLine);
     
                Coursier coursierAntoine = container.Resolve<Coursier>("Antoine") as Coursier;
                Debug.WriteLine("coursierAntoine.Vehicule.WheelsCount: " + coursierAntoine.Vehicule.WheelsCount);
                this.textBox1.AppendText(String.Format("Antoine est équipé d'un véhicule à {0} roues.", coursierAntoine.Vehicule.WheelsCount) + Environment.NewLine);


    Et ça fonctionne ! ;-)

    Rappel de la question : pourquoi les objets sont déclarés dans la section "types" et pas dans la section "instances" ?

    Cyrille.

  2. #2
    Rédacteur

    Je suppose que Type c'est pour enregistrer mapper un type à un autre (mapper par exemple un IToto à un Toto).
    Quand tu fais un container.Resolve<IToto> il te renvoie un objet de type Toto.

    Instance ça doit être pour mapper un type à une instance précise.
    Quand tu lui demande le type A il te renvoie l'instance que tu as enregistrés, et pas une nouvelle.

    Sinon tu as lu la doc, ça doit être expliqué dedans ?



      • If you used the RegisterType method to register a type, Unity will create a new instance of the registered type during the first call the Resolve or ResolveAll method or when the dependency mechanism injects instances into other classes based on attributes or constructor parameters within that class. Subsequent requests will return the same instance.
      • If you used the RegisterInstance method to register an existing object, Unity will return this instance every time you call to the Resolve or ResolveAll method or when the dependency mechanism injects instances into other classes based on attributes or constructor parameters within that class.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.