2010-10-15 9 views
8

Vorrei passare argomenti al costruttore di un appender personalizzato, quindi suppongo di dover sovrascrivere il meccanismo di inizializzazione di Appenders. Il problema è che non riesco a trovare, nei documenti, un modo per collegarlo, e mi fa pensare che non è possibile (o che i documenti sono incompleti).Posso passare argomenti a un costruttore di appender di log4net personalizzato?

Per quanto riguarda la versione 1.2.10, questo non è possibile senza modificare il codice sorgente. La sezione rilevante è in Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286:

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

Come si può vedere, dovrebbe utilizzare questo sovraccarico (o qualcosa del genere in questo modo) per permettermi di raggiungere i miei bisogni.

Activator.CreateInstance(Type, Object[]) 

risposta

4

non sono sicuro se ho ben capito il tuo obiettivo, ma se si desidera che l'appender di essere configurabile si deve fondamentalmente per esporre una proprietà sulla vostra appender. Quindi è possibile impostare questa proprietà a livello di programmazione o nel file di configurazione.

L'UdpAppender espone una proprietà come questa:

public int LocalPort 
{ 
    get; set; 
} 

(In realtà è un po 'più complesse, perché controllano se il valore della setter è una porta valida.)

Nel file di configurazione lo si utilizza in questo modo:

<localPort value="8080" /> 

questo funziona molto bene per i tipi semplici come string, int ... ma anche per alcuni tipi complessi come IPAddress. Se hai il tuo tipo allora sarà più difficile farlo funzionare e dovrei controllare prima come è fatto.

+2

Stefan, il problema è esattamente quello che scrivi alla fine: devo fornire un oggetto complesso che viene istanziato in fase di runtime. Non c'è modo di fornirlo tramite la configurazione XML. – Simone

+0

Non è possibile creare un'istanza di questa classe basata su alcune stringhe di parametri? –

+0

No, devo passare un altro oggetto esistente. – Simone

1

Per quanto riguarda la versione 1.2.10, questo non è possibile senza modificare il codice sorgente.

La sezione rilevante è nel repository \ Hierarchy \ XmlHierarchyConfigurator.cs alla riga 286:

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

Come si può vedere, dovrebbe utilizzare

Activator.CreateInstance(Type, Object[])
sovraccarico (o qualcosa del genere in questo modo) per permettermi di raggiungere il mio esigenze.

+0

A meno che tu non stia dicendo che la risposta è "non è possibile", questa "risposta" sembra essere più informazioni per la domanda ... –

Problemi correlati