2010-10-15 24 views
8

Me gustaría pasar argumentos al constructor de un appender personalizado, así que supongo que tengo que anular el mecanismo de inicialización de los Appenders. El problema es que no puedo encontrar, en los documentos, una forma de conectarlo, y me hace pensar que no es posible (o que los documentos están incompletos).¿Puedo pasar argumentos a un constructor de Appender log4net personalizado?

En cuanto a la versión 1.2.10, esto no es posible sin modificar el código fuente. La sección relevante está en Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286:

IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true)); 

Como se puede ver, se debe utilizar esta sobrecarga (o algo a lo largo de esa manera) que me permita alcanzar mis necesidades.

Activator.CreateInstance(Type, Object[]) 

Respuesta

4

no estoy seguro si entiendo su objetivo, pero si usted quiere que su appender a ser configurable que básicamente tienen que exponer una propiedad en su appender. Luego puede establecer esta propiedad de forma programática o en el archivo de configuración.

El UdpAppender expone una propiedad como esta:

public int LocalPort 
{ 
    get; set; 
} 

(En realidad, es un poco más complejo, ya que comprobar si el valor en la incubadora es un puerto válido.)

En el archivo de configuración se utiliza de esta manera:

<localPort value="8080" /> 

esto funciona muy bien para los tipos simples como cadena, int ... sino también para algunos tipos complejos como IPAddress. Si tiene su propio tipo, será más difícil hacerlo funcionar y tendría que verificar primero cómo se hace.

+2

Stefan, el problema es exactamente el que se escribe al final: tengo que proporcionar un objeto complejo que se crea una instancia en el tiempo de ejecución. No hay forma de proporcionarlo a través de la configuración XML. – Simone

+0

No puede crear una instancia de esta clase en función de algunas cadenas de parámetros? –

+0

No, debo pasar otro objeto existente. – Simone

1

En cuanto a la versión 1.2.10, esto no es posible sin modificar el código fuente.

La sección relevante está en Repository \ Hierarchy \ XmlHierarchyConfigurator.cs en la línea 286:

`IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));` 

Como se puede ver, se debe utilizar

Activator.CreateInstance(Type, Object[])
sobrecarga (o algo a lo largo de esa manera) para permitir a lograr mi necesariamente.

+0

A menos que esté diciendo que la respuesta es "no es posible", esta "respuesta" parece ser más información para la pregunta ... –

Cuestiones relacionadas