11
votes

Comment injecter l'argument du constructeur du fichier de configuration avec unité

Imagine que nous avons une classe xxx pré>

et app.config (ou web.config (ou web.config) p>

<appSettings>
    <add key="value" value="some value" />
</appSettings>


3 Réponses :


9
votes

C'est très facile.

C # Code: P>

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity">    
 <container>
  <register type="[namespace].MyClass, [assembly-name]" 
    mapTo="[namespace].MyClass, [assembly-name]">
    <constructor>
      <param name="val" value="Ethan Woo"/>
    </constructor>
  </register>
</container>


5 commentaires

Où est la référence à l'appSetage nommé "valeur" dans ce fichier de configuration?


: "valeur" Attribut ici.


Il n'y a aucune référence à un fichier de configuration. Ensuite, comment mapper le fichier de configuration ou juste à partir de ?


"Fichier de configuration" ici signifie qu'App.Config pour l'application Win / Console et web.config pour l'application d'hébergement IIS par ex. Web, wcf ... conteneur.loadconfiguration (); chargera automatiquement la configuration en conséquence.


Vous ne répondez pas à la question. Cette réponse concerne une clé / valeur de Web.config to Unity Constructor et non sur la manière de définir le constructeur d'unité dans web.config.



7
votes

Si vous utilisez une configuration XML, vous pouvez le faire en définissant une extension qui gère les applsettings comme paramètres Unity, voir http://www.neovolve.com/2010/04/23/appsetting-parameter-Injection-in-unity-2/ . < P> Alternativement, si vous faites une configuration C #, vous pouvez utiliser un constructeur d'injection comme suit ... xxx

la raison d'utiliser la valeur AppSettings plutôt que la chaîne directement dans le XML config est qu'il centralise toutes les valeurs de paramter dans des applications et simplifie les migrations entre les environnements.


2 commentaires

Pourquoi RegistryType () Type de registre Fonction Spécifiez deux noms de la même classe?


L'enregistrement XML d'origine indique le type, MAPTO avec le même type dans les deux donc je reproduisiez cela. Pour l'enregistrement fluide, vous êtes correct, vous n'avez pas besoin de la deuxième valeur; Toutefois, Toutefois, vous avez votre inscription



6
votes

Tout à fait un ancien poste, mais je pensais que les informations suivantes pourraient être utiles au cas où il ne serait pas une valeur pour un type natif, mais un type de données complexe à la place:

p>

<configuration>

  <configsections>
    <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration">
    </section>
  </configsections>

  <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">

    <alias alias="IRepository" type="UnityTest.IRepository, UnityTest">
      <alias alias="Repository" type="UnityTest.Repository, UnityTest">

        <container>
          <register mapto="Repository" type="IRepository">

            <register name="MyClass" type="UnityTest.MyClass, UnityTest">
              <constructor>
                <param name="repository" type="IRepository">
                <dependency name="IRepository">

                </dependency>
              </constructor>
            </register>

          </register>
        </container>

      </alias>
    </alias>
  </unity>

</configuration>


0 commentaires