9

ほとんどサイト全体で非常に頻繁に使用されるいくつかのデータ層クラスがあります。

以前は Windows アプリケーションで作業していましたが、以前はモジュール (vb.net) でそのオブジェクトを作成していましたが、現在は C# と ASP.NET で作業しています。

すべてのページで同じオブジェクトを複数回作成する必要がないように、同じことを行う必要があります。
グローバル変数を使用するようなものを使用したい。

これどうやってするの?
global.asax を使用して行われ
ますか? global.asax でオブジェクトを作成できますか?

私はasp.netを初めて使用するので、説明とともに構文を提供してみてください。

4

6 に答える 6

9

実際にglobal.asaxを使用する必要はありません。staticオブジェクトをsとして公開するクラスを作成できます。これはおそらく最も簡単な方法です

public static class GlobalVariables {
    public static int GlobalCounter { get; set; }
}

すべてのセッションで共有されるため、アプリケーションの状態ASP.NETキャッシュを使用することもできます。

ただし、このような状況にある場合は、Spring.NETなどのフレームワークを使用してすべてのSingtonインスタンスを管理します。

これは、Spring.NETを使用してクラスインスタンスを取得する方法の簡単な例です。

//The context object holds references to all of your objects
//You can wrap this up in a helper method 
IApplicationContext ctx = ContextRegistry.GetContext();

//Get a global object from the context. The context knows about "MyGlobal"
//through a configuration file
var global = (MyClass)ctx.GetObject("MyGloblal");

//in a different page you can access the instance the same way
//as long as you have specified Singleton in your configuration

しかし、実際には、ここでのより大きな問題は、なぜグローバル変数を使用する必要があるのか​​ということです。私はあなたが本当にそれらを必要としないと推測しています、そしてあなたにとってより良い全体像の解決策があるかもしれません。

于 2009-11-25T15:15:50.407 に答える
3

この目的のためにアプリケーション状態を使用することをお勧めします。

于 2009-11-25T15:28:03.800 に答える
1

.NET でのグローバル変数の使用に関する "すべき" 部分は省略し、いくつかの "グローバル" 変数にGlobal.asaxを使用する現在作業中のコードを示します。そのファイルからの情報は次のとおりです。

public class Global : System.Web.HttpApplication
{
        public enum InvestigationRole
        {
            Complainent,
            Respondent,
            Witness,
        }

        public static string Dog = "Boston Terrier";
}

したがって、ASPX ページから、次のように静的グローバル クラスを開くことで、これらのメンバーにアクセスできます。

protected void Page_Load(object sender, EventArgs e)
{
    string theDog = Global.Dog; 
    // copies "Boston Terrier" into the new string.

    Global.InvestigationRole thisRole = Global.InvestigationRole.Witness;
    // new instance of this enum.
}

バイヤーは注意してください。.NET の世界では "グローバル変数" の概念を扱うより良い方法がありますが、上記の方法を使用すると、少なくとも、すべての ASPX ページで同じ文字列を繰り返す上に、抽象化のレイヤーが得られます。

于 2011-03-08T18:26:16.930 に答える
0

パブリック構造体を使用します。クラスよりも効率的で、列挙型よりも柔軟です。

次のコードを使用してファイルを作成します (できれば「/Classes」フォルダー内)。

public struct CreditCardReasonCodes
{
    public const int Accepted = 100;
    public const int InsufficientFunds = 204;
    public const int ExpiredCard = 202;
}

重要: 構造が Web アプリケーション全体でグローバルに表示されるように、名前空間を配置しないでください。

コード全体で参照するには、次の構文を使用します。

if (webServiceResult == CreditCardReasonCodes.Accepted)
{
    Console.WriteLine("Authorization approved.")
}

「const」メンバーを使用すると、コンパイル時に値が不変になり、アプリケーションの実行中に値が変更される可能性がなくなります。

于 2014-09-19T23:10:10.273 に答える
0

ASP.NET Application State Overview」には、さまざまなキーと値のペアを格納できるという点で Session オブジェクトと同様に、すべてのユーザーにわたってデータを格納するために使用できるオブジェクトが含まれています。

于 2009-11-25T15:44:02.687 に答える