Mam zintegrowaną aplikację log4net w mojej aplikacji. Mam kilka metod pomocnika, aby pomóc w logowaniu się, które wywołanie log4net. Podczas refaktoryzacji planuję przenieść te metody do klasy bazowej, aby kod nie był powtarzany w innych klasach pochodnych.Log4net - optymalna strategia w przypadku dziedziczenia
bez modelu spadków następujące pracował prawidłowo w każdej klasie
private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Umieszczenie powyższe klasy bazowej powróci Zgłaszająca typu co bazową, nie pochodzące klasy.
Jaki jest optymalny sposób przeniesienia tej deklaracji do klasy bazowej?
Obecnie mogę wymyślić kilka sposobów osiągnięcia tego celu, ale nie uważam ich za optymalne.
Dzięki Stefan. Czy muszę więc uczynić "Log" nie statycznym? – byte
Lub w konstruktorze klasy podstawowej napisz coś jak if (BaseClass.Log == null) {BaseClass.Log = LogManager.GetLogger (this.GetType()); } // przy założeniu, że Log jest nadal statyczny w klasie prywatnej w BaseClass – byte
Nie może być statyczny, ponieważ potrzebujesz jednej instancji na klasę pochodną. –