【问题标题】:Is it possible to call an instance method from a static constructor in WCF service?是否可以从 WCF 服务中的静态构造函数调用实例方法?
【发布时间】:2010-03-11 09:15:37
【问题描述】:

是否可以从 WCF 服务中的静态构造函数调用实例方法?有没有类似于当前上下文的东西,我可以通过它获取 MyService 的当前实例?

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

    private void Func()
    {
    }
}

编辑:

这个问题是 WCF 问题,而不是关于从静态方法调用实例方法的简单语言问题。以下是 Web 应用程序中类似案例的示例:

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

    private void Func()
    {
    }

}

所以我希望在 WCF 中调用服务时存在一些全局上下文,该上下文具有当前正在执行的 MyService 实例。

【问题讨论】:

    标签: .net wcf static-constructor


    【解决方案1】:

    在这里取出 WCF 服务 - 这不是 WCF 问题,它是一个纯粹的基本 C# 语言问题。与作为服务的类完全无关。

    答案是否定的。

    静态构造函数没有调用实例函数的业务——它没有实例的引用。更改类设置,这样就不需要了。设计错误。很可能代码不应该在 STATIC 构造函数中,而是在实例构造函数中。

    【讨论】:

      【解决方案2】:

      不能从静态构造函数调用实例方法。您不知道 CLR 何时会调用此静态构造函数。您所知道的是,它将在该对象的任何实例创建之前被调用。而且你不能在没有对象实例的情况下调用实例方法。

      【讨论】:

        【解决方案3】:

        嗯,这是可能的。你能解释一下为什么需要这个吗?

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-08
          • 1970-01-01
          相关资源
          最近更新 更多