log4net регистраторы универсального типа в службе Windows WCF - PullRequest
0 голосов
/ 29 июня 2011

Кто-нибудь знает, почему log4net инициализирует регистраторы по-разному, когда WCF-процесс является консольным приложением и когда это служба Windows?

public class GenericType<T> : where T : class
{
    public GenericType()
    {
        log = LogManager.GetLogger("Namespace.MyLogger");
    }
}

в консольном приложении регистратор - «MyLogger», в службе Windows - «GenericType`1».

Кажется, что в службе Windows log4net применяет что-то вроде:

log = LogManager.GetLogger(GetType());

Процессы запускаются с использованием этого кода:

static class Program
{
    static void Main(params string[] parameters)
    {           
        var service = new Service();
        if (parameters.Length > 0 && parameters[0].ToLower() == "/c")
        {
            service.RunConsole();//Calls service.OnStart()
        }
        else
        {
            ServiceBase.Run(service);
        }

    }
}

Поэтому, если мы запускаем его как консоль, мы передаем аргумент "/ c".Когда мы запускаем его как службу Win, он устанавливается как служба и выполняется без "/ c".Это единственное отличие, поэтому загрузка типов идентична.

Не универсальные регистраторы инициализируются просто отлично.

РЕДАКТИРОВАТЬ:

Упрощенный пример

1 Ответ

1 голос
/ 29 июня 2011

Я думаю, что поведение, которое вы описываете, связано с доступностью ваших типов в вызывающем приложении, это зависит от того, как вы ссылаетесь на объект T и как вы выставляете его как контракт данных или через общие библиотеки классов, такие как ядро ​​или интерфейсы...

Не могли бы вы подробнее рассказать о вашей архитектуре и стеке проектов c #?

В этом нет проблем в Log4Net, это скорее вопрос о том, как имя типа решается разными потребителями.

...