2010-10-15 17 views
8

Argümanları özel bir ek yapıcının yapıcısına iletmek istiyorum, bu yüzden Ekleyicilerin başlatma mekanizmasını geçersiz kılmam gerek. Sorun şu ki, dokümanlar içinde bir bağlantı kuramıyorum ve bunun mümkün olmadığını (ya da belgelerin eksik olduğunu) düşünmemi sağlıyor.Argümanları özel bir log4net Ekleyicinin yapıcısına iletebilir miyim?

1.2.10 sürümünde, kaynak kodu değiştirilmeden bu mümkün değildir. İlgili bölüm Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286 içinde:

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

Gördüğünüz gibi, benim ihtiyaçlarımı ulaşması için (yani yol boyunca ya da bir şey) bu aşırı kullanmalıdır.

Activator.CreateInstance(Type, Object[]) 

cevap

4

ben hedefinizi anlıyorum emin değilim, ancak appender yapılandırılabilir olmak istiyorsanız temelde appender bir özelliği açığa çıkarmak zorundayız. Sonra bu özelliği programlı olarak veya yapılandırma dosyasında ayarlayabilirsiniz.

UdpAppender böyle bir özellik sunar:

public int LocalPort 
{ 
    get; set; 
} 

(onlar setter değer geçerli bir liman olup olmadığını kontrol olarak Aslında biraz daha karmaşıktır.) Konfigürasyon dosyasında

böyle kullanmalı: Bu dize, int gibi basit türleri için çok iyi çalışıyor ... ama aynı zamanda IPAddress gibi bazı karmaşık türleri için

<localPort value="8080" /> 

. Eğer kendi tipiniz varsa, o zaman bunu yapmak daha zor olacaktır ve bunun nasıl yapıldığını ilk önce kontrol etmeliyim.

+2

Stefan, sorun tam olarak yazdığınızın aynısıdır: Çalışma zamanında başlatılan karmaşık bir nesne vermem gerekiyor. XML yapılandırması yoluyla sağlamanın bir yolu yoktur. – Simone

+0

Bazı parametre dizelerine göre bu sınıfın bir örneğini oluşturamazsınız? –

+0

Hayır, başka bir nesneyi geçirmeliyim. – Simone

1

1.2.10 sürümünde, kaynak kodu değiştirilmeden bu mümkün değildir.

ilgili bölüm hattı 286 de Deposu \ Hiyerarşi \ XmlHierarchyConfigurator.cs içinde: Gördüğünüz gibi

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

, bu (yani yol boyunca ya da bir şey)

Activator.CreateInstance(Type, Object[])
aşırı kullanmalıdır bana ulaşması için benim ihtiyacı vardır.

+0

Cevabın "mümkün değil" olduğunu söylemezseniz, bu "cevap" sorusuyla ilgili daha fazla bilgi ortaya çıkıyor ... –

İlgili konular