2010-02-22 12 views
7

Recientemente estallé una parte de mi aplicación winform en .dll. Algunas de las clases en ese dll quieren obtener/almacenar configuraciones de usuario. Las clases acaban de utilizar el VS genera archivo de configuración de lo que acaba de hacer Properties.Settings.Default.SomeSetting = var;Properties.Settings.Default.Save() etc.¿Cómo acceder a la configuración de la aplicación desde un .dll?

¿Cuáles son mis opciones ahora que me movía ese código a una biblioteca de clases/.dll?

+0

¿Está buscando un método para acceder a la configuración anterior o tiene la impresión de que las bibliotecas de clase no pueden tener archivos app.config? –

+0

No sé lo que estoy buscando, es por eso que pregunto. No puedo hacer que mi dlls acceda a su aplicación separada. Sin embargo, ni la implementación de clickonce de visual studio incluye un archivo de configuración de .dll. – leeeroy

Respuesta

3

La aplicación de alojamiento debe manejar la interfaz para el archivo de configuración, no la DLL. De cualquier

  1. Pass cualquiera que sea la configuración es necesario leer/modificar dentro del DLL como parámetros, o

  2. Pass en una colección de nombre y valor de parámetros que pueden ser modificados por el DLL, y guardar cualquier cambio se crean mediante la DLL a la colección cuando el control vuelve a la aplicación de llamada.

Esto es similar en principio a la eliminación de una interfaz de base de datos desde la capa de negocio de una aplicación de niveles y encapsular en una capa de datos.

2

No tiene mucho sentido para mí tener una DLL que almacena la configuración del usuario. Una DLL es una biblioteca, no una aplicación, y no interactúa directamente con el usuario. Si las clases en el archivo DLL necesitan acceso a la configuración del usuario, puede pasarlas como parámetros.

+0

DLL no son solo bibliotecas. Tiene DLL que son complementos y tienen diferentes interfaces que pueden intercambiarse en caliente mientras se ejecuta la aplicación principal. Si el plugin necesita una credencial de red o algo así, necesita la DLL para poder leer la configuración establecida en la aplicación principal. No debe cambiar el constructor de miles de complementos porque uno de ellos necesita un valor adicional – Franck

2

La clase Propiedades se autogenera. Es realmente un contenedor en el archivo de configuración. Si no desea cambiar su diseño, simplemente ingrese el código y cópielo a su DLL. Pero recuerda que ya no se mantendrá mágicamente (regenerado). O puede usar ConfigurationManager para obtener el archivo de configuración directamente.

0

yo no recomiendo que (mejor uso de su propia clase de configuración), pero se puede intentar esto:

string sectionName = "applicationSettings/" + 
      appName + ".Properties.Settings"; 
     System.Configuration.ClientSettingsSection section = 
      (System.Configuration.ClientSettingsSection) 
      System.Configuration.ConfigurationManager.GetSection(sectionName); 
     foreach (SettingElement setting in section.Settings) 
     { 
      string value = setting.Value.ValueXml.InnerText; 
      string name = setting.Name; 
      if (name.ToLower().StartsWith(searchName.ToLower())) 
      { 
       return value; 
      } 
     } 
0

Para aquellos que necesitan para leer la configuración de userDirectory/user.config, aquí es una solución:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
ConfigurationSectionGroup userSettings = config.GetSectionGroup("userSettings"); 
ClientSettingsSection settings = (ClientSettingsSection)userSettings.Sections.Get("[applicationName].Properties.Settings"); 
SettingElement elem = settings.Settings.Get([settingName]); 
var sett = elem.Value.ValueXml.InnerText; 
Cuestiones relacionadas