2010-11-23 8 views
4

Je configure les configurations d'unité dans le web.config et j'ai un type auquel je veux passer la chaîne de connexion qui existe déjà dans le même fichier web.config.Dans Unity config, comment transmettre connectionString à un constructeur?

<connectionStrings> 
    <add name="DatabaseConnectionString" connectionString="metadata=res://*/Database.csdl|res://*/Database.ssdl|....." providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

et dans la section d'unité il y a:

<type type="IDatabase" mapTo="Database" > 
     <constructor> 
      <param name="connectionString" > 
      <value value="metadata=res://*/Database.csdl|res://*/Database.ssdl|...."/> 
      </param> 
     </constructor> 
</type> 

Mais comme je suis en train d'écrire le même conectionString deux fois dans le même fichier .config, Y at-il une autre meilleure façon de passer juste le nom de the connectionString au constructeur de base de données de type pour éviter les doublons dans le web.config?

Répondre

7

Vous pouvez écrire votre propre TypeConverter comme suggéré par Chris answering a previous question.

<type type="IDatabase" mapTo="Database" > 
     <constructor> 
      <param name="connectionString" > 
      <value value="DatabaseConnectionString" typeConverter="ConnectionStringTypeConverter"/> 
      </param> 
     </constructor> 
</type> 

http://msdn.microsoft.com/en-us/library/ff660914(v=PandP.20).aspx#config_value

EDIT

Ce convertisseur devrait fonctionner:

public class ConnectionStringTypeConverter : TypeConverter 
    { 
     public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) 
     { 
     return ConfigurationManager.ConnectionStrings[value.ToString()]; 
     } 
    } 
+0

Comment écrire ce TypeConverter, j'ai essayé un exemple, il http://unity.codeplex.com /Thread/View.aspx?ThreadId=38312 mais n'a pas fonctionné. –

+0

J'ai mis à jour ma réponse – onof

+0

Je l'ai essayé et il m'a donné cette erreur: "le nom de type ou l'alias ConnectionStringTypeConverter n'a pas pu être résolu. Veuillez vérifier votre fichier de configuration et vérifier ce nom de type." –

-1

Rien de prévu pour cela. Vous pouvez écrire une extension de schéma qui fera quelque chose dans ce sens, mais ce n'est pas un processus bien documenté pour le moment. Je verrai si je peux trouver un exemple plus tard.