En las aplicaciones .Net, a menudo vemos que los proyectos generados por VS para nosotros contendrán archivos como App.config o Web.config. Este archivo es lo que llamamos el archivo de configuración de la aplicación. Este archivo describe cierta información relacionada con nuestra aplicación, como la conexión a la base de datos, el modo de autenticación, etc. En el programa, podemos usar la propiedad ConnectionStrings de ConfigurationManager para obtener convenientemente la información de la cadena de conexión de la base de datos en el archivo de configuración.
Pero a veces necesitamos ampliarlo y agregar algunos elementos personalizados en lugar de simplemente usar la configuración predeterminada. Por ejemplo, es posible que necesitemos cargar dinámicamente una clase e inicializarla cuando se inicia el programa, pero desconocemos esta clase o los datos de inicialización durante el diseño del programa. Creo que todo el mundo se ha encontrado con ese problema, así que no lo explicaré demasiado aquí. La mejor manera es escribir estas cosas que pueden cambiar en el archivo de configuración. Cuando esté seguro, solo necesita modificar el archivo de configuración, en lugar de tomar 30 segundos para abrir VS cuando el producto está a punto de conectarse. el código.
Agregar algunos elementos personalizados a un archivo de configuración es fácil y solo requiere dos pasos:
1. Registre el nombre del nodo que desea definir y el controlador de la sección de configuración utilizado para procesar el nodo en el nodo <configSections>. El código es el siguiente:
1 <configSections>2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/>3 </configSections>
2. Agregue nodos personalizados en las ubicaciones adecuadas. El código es el siguiente:
1 <configSections> 2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/> 3 </configSections> 4 <dbFactory> 5 <default factory="sql"></default> 6 <factorys> 7 <agregar nombre="sql" ensamblaje="Hello.Data" class="SqlDbFactory" /> 8 <agregar nombre="oracle" ensamblaje="Hello.Data" class="OracleDbFactory" /> 9 </ fábricas>10 </dbFactory>
Se ha agregado el nodo personalizado, pero ¿cómo obtenemos esta información de configuración en el programa? Creo que muchos de ustedes son expertos en jugar con XML si usan algunas clases en System. De hecho, este es el caso. El maestro es realmente un maestro. Realmente lo admiro. Pero si se implementa de esta manera, realmente no es necesario que escriba esta publicación de blog.
El marco .Net implementa muchas API de configuración para que simplifiquemos nuestras operaciones en los archivos de configuración. En el primer paso, mencionamos el controlador de la sección de configuración, que se utiliza para leer y escribir nuestra información de nodo personalizada. Entonces, ¿cómo implementamos un controlador de sección de configuración? Primero, echemos un vistazo a las clases y conceptos relacionados.
ConfigurationSection: los nodos personalizados deben heredar esta clase para proporcionar procesamiento personalizado y acceso programático a la sección de configuración personalizada.
ConfigurationElement: Representa un elemento dentro del archivo de configuración.
ConfigurationElementCollection: representa un elemento de configuración que contiene una colección de elementos secundarios.
Con estas clases, podemos resumir que existen dos tipos de elementos de configuración en el archivo de configuración.
Primero, un elemento de configuración único es un elemento que hereda de ConfigurationElement y no contiene ningún elemento secundario.
En segundo lugar, el elemento de configuración de la colección es un elemento heredado de ConfigurationElementCollection, que contiene una colección de elementos secundarios.
Los conceptos suelen ser relativamente abstractos para comprender estas cosas, debemos explicarlas en detalle basándonos en los ejemplos que dimos anteriormente.
Hay dos elementos en la sección de configuración <dbFactory>, a saber, <default> y <factorys>, y el elemento <factorys> contiene dos subelementos. Entonces aquí <default> es un elemento de configuración único y <factorys> es un elemento de configuración de colección. Necesitamos implementar las clases y sus propiedades correspondientes a estos elementos respectivamente.
Elemento <default>: Es un elemento de tipo único, por lo que heredamos ConfigurationElement. Hay un atributo de fábrica en este elemento, por lo que lo definimos en consecuencia en la clase. El código es el siguiente:
código
clase pública DefaultElement: ConfigurationElement { [ConfigurationProperty("factory")] public string Factory { get { return this["factory"] as string } set { this["factory"] = valor;
Nota: Necesitamos registrar el atributo ConfigurationProperty de la propiedad encima de la definición de propiedad.
<factorys> elementos secundarios:
código
clase pública FactoryElement: ConfigurationElement { [ConfigurationProperty( "nombre")] cadena pública Nombre { get { return this["name"] as string } set { this["name"] = value } } [ConfigurationProperty("assembly"; )] cadena pública Ensamblaje { obtener { devolver esto["ensamblaje"] como cadena } establecer { esto["ensamblaje"] = valor } } [ConfigurationProperty("clase")] cadena pública Clase { obtener { devolver esto[" clase"] como cadena; } establecer { this["clase"] = valor; } } }
El elemento <factorys> es un elemento de colección y hereda ConfigurationElementCollection.
código
clase pública FactoryElements: ConfigurationElementCollection { anulación protegida ConfigurationElement CreateNewElement() { return new FactoryElement(); objeto de anulación protegida GetElementKey (elemento ConfigurationElement) { return ((FactoryElement)element).Name } public FactoryElement this[nombre de cadena] { get {; devolver BaseGet( nombre ) como FactoryElement;
La clase ConfigurationElementCollection es una clase abstracta y debes implementar explícitamente su método CreateNewElement y su método GetElementKey.
Nodo <dbFactory>, heredado de ConfigurationSection
código
clase pública DbFactorySection: ConfigurationSection { [ConfigurationProperty("default")] public DefaultElement DefaultFactory { get { return this["default"] as DefaultElement } set { this["default"] = valor } } [ConfigurationProperty( "factorys"; )] public FactoryElements Factorys { get { return this["factorys"] as FactoryElements } set { this["factorys"] = valor;
El controlador de la sección de configuración finalmente está terminado. Coloque estas cuatro clases en el mismo directorio del proyecto y compílelas en una DLL. Cuando necesite obtener información de configuración, haga referencia a esta DLL y use la sección DbFactorySection = ConfigurationManager.GetSection( "dbFactory" ) como DbFactorySection. ¿Es la sección lo que desea?