我写了一个组件,在这个组件中有一个后台对象用来实现一些网络功能。现在我想把这个组件放到一个asp.net应用程序中,规定这个程序只能有一个这个后台类的实例(即使多个用户打开我的asp.net程序)。请问我该在哪里定义这个实例呢?我试了global.asax中的application_start中定义,vs报错。请高手指点一下。

解决方案 »

  1.   

    放在global.asax里没错,可能是你代码有问题,贴出来看下
      

  2.   

    global.asax文件:<%@ Application Language="C#" %><script runat="server">    void Application_Start(object sender, EventArgs e) 
        {
            using ServerCMPP;
                  }
            
    </script>我的类定义在ServerCMPP名字空间中,这里连using这个空间都不行,vs提示
    错误 1 语法错误,应输入“(” 这个类我已经在console中测试过了,没问题。
      

  3.   

    <%@ Application Language="C#" %>
    <%@ Import Namespace="ServerCMpp" %>
      

  4.   

    原来是这样。
    但是我在application_start()中定义的变量,怎么到其它页还是不能使用?错误 1 当前上下文中不存在名称“Server3” F:\mypro\WebSendTest\Default.aspx.cs 30
       这个变量我已经在application_start中用new定义过了,不是说在这里定义的就是全局变量么?
      

  5.   

    何必要全局变量呢?这种想法是结构化编程时代的东西变量肯定依赖于功能,设置一个类的一个STATIC变量,就可以不必初始化实例,随时用这个变量了
      

  6.   

    我写的这个后台类要连接其它服务器,并开启多个线程收发信息。现在我想用asp.net作界面,但是我不想产生多个这个后台类的实例,因为这样会产生逻辑混乱。因此我想每个用户开启我的页面后,都共用一个已经产生的实例,用这个实例来进行操作。这就是我为什么想要全局变量的原因了。
      

  7.   

    注意,你写在global.asax里的变量并不就是全局了,你必须使用Application来贯穿整个站点
    比如:
    Object o = new Object();
    你要在全局使用这个o对象,在ASP.NET中应该在Application.Start()中加入
    Application.Add("app" , o);
    在其他页面引用的时候使用
    Object o = (Object)Application["app"];
    来获得这个对象.
      

  8.   

    谢谢你,phoenixsbk, 问题解决了,给30分。另外kknd2006的提示也给了我另一种解决方法,也给10分。谢谢大家。