Можно ли вызвать метод экземпляра из статического конструктора в службе WCF?

Можно ли вызвать метод экземпляра из статического конструктора в службе WCF? Есть ли что-то вроде текущего контекста, через который я могу получить текущий экземпляр MyService?

public class MyService : IMyService
{
    static MyService()
    {
        //how to call Func?
    }

    private void Func()
    {
    }
}

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

Этот вопрос - вопрос WCF, а не простой язык о вызове метода экземпляра из статического. Вот пример аналогичного случая в веб-приложении:

public class MyPage : Page
{
    static MyPage()
    {
        var page = (MyPage)HttpContext.Current.Handler;
        page.Func();
    }

    private void Func()
    {
    }

}

Поэтому я ожидаю, что в WCF при вызове службы существует некоторый глобальный контекст, в котором есть текущий исполняемый экземпляр MyService.


person Kamarey    schedule 11.03.2010    source источник


Ответы (3)


Выньте службу WCF здесь - это не вопрос WCF, это чистый базовый вопрос языка С#. Не имеет ничего общего с классом, являющимся сервисом вообще.

Ответ - нет.

Статический конструктор не имеет права вызывать функцию экземпляра — у него нет ссылки на экземпляр. Измените настройку класса, чтобы это не требовалось. Ошибка дизайна. Скорее всего, код должен быть не в конструкторе STATIC, а в конструкторе экземпляра.

person TomTom    schedule 11.03.2010

Невозможно вызвать метод экземпляра из статического конструктора. Вы не знаете, когда CLR вызовет этот статический конструктор. Все, что вы знаете, это то, что он будет вызываться до того, как будут созданы какие-либо экземпляры этого объекта. И вы не можете вызвать метод экземпляра, не имея экземпляра объекта.

person Darin Dimitrov    schedule 11.03.2010

Что ж, это возможно. Можете объяснить, зачем вам это нужно?

public class MyService : IMyService
    {
        static MyService()
        {
            new MyService().Func();
        }

        private void Func()
        {
        }
    }
person Vadym Stetsiak    schedule 11.03.2010