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

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

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

    private void Func()
    {
    }
}

EDIT:

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

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

    private void Func()
    {
    }

}

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

Ответы [ 3 ]

0 голосов
/ 11 марта 2010

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

0 голосов
/ 11 марта 2010

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

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

        private void Func()
        {
        }
    }
0 голосов
/ 11 марта 2010

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

Ответ НЕТ.

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

...