c# - 替换 .net Web 应用程序中的静态变量

标签 c# asp.net xml

我没有遇到任何问题,但我正在努力防止将来出现问题,并希望得到一些帮助以找出解决此问题的正确方法。我有一个供应商将 XML 发布到我创建的网页。这可能每 2 分钟发生一次。然后网页将读取发布的 XML 并将其插入到数据库中。 序列化 XML 和插入还不够好,所以我必须在将数据发送到数据库之前进行一些解析。我创建了一个如下所示的静态类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Accounting
/// </summary>
public static class Accounting
{
    public static String currentFile = "";
    public static List<string> PurchaseOrder = new List<string>();
    public static List<string> item = new List<string>();
    public static List<string> unitPrice = new List<string>();
    public static List<string> shippingCharge = new List<string>();
    public static List<string> handlingCharge = new List<string>();
    public static List<string> discountAmount = new List<string>();
    public static List<string> UOM = new List<string>();
    public static List<string> invoiceNumber = new List<string>();
    public static List<string> supplierNumber = new List<string>(); //{ get; set; }
    public static List<string> supplierInvoiceNo = new List<string>();
    public static List<string> account = new List<string>();
    public static List<string> fund = new List<string>();
    public static List<string> org = new List<string>();
    public static List<string> prog = new List<string>();
    public static List<string> activity = new List<string>();
    public static List<string> location = new List<string>();
    public static List<string> distributionType = new List<string>();
    public static List<string> distributionValue = new List<string>();
    public static List<int> sequence = new List<int>();
    public static List<string> quantity = new List<string>();
    public static List<string> dueDate = new List<string>();
}

这个类是静态的,因为我需要对来自不同方法的变量进行操作。 现在事情变得棘手了,我一直读到如果我在 .NET Web 应用程序中使用静态变量,我将最终在 session 之间共享变量。这对我来说可能是一场噩梦。所以我研究了单例模式,我也发现了这个 Static variables in web applications通过堆栈流解决方案。 我读到我应该做这样的事情

public class SingletonPerRequest
{
    public static SingletonPerRequest Current
    {
        get
        {
            return (HttpContext.Current.Items["SingletonPerRequest"] ??
                (HttpContext.Current.Items["SingletonPerRequest"] = 
                new SingletonPerRequest())) as SingletonPerRequest;

        }
    }
}

我的问题是我不知道如何将我的类转换为基本上执行上述操作。换句话说,我如何设置类以遵循这种单例请求模式。如果这没有意义,请原谅我的愚蠢。我的最终目标是让对页面的每个请求都有自己的会计变量 session ,而不是跨 session 共享。 任何帮助将不胜感激。

最佳答案

这是你的类(class):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class Accounting
{
    public static Accounting Current
    {
        get
        {
            return (HttpContext.Current.Items["Accounting"] ??
                (HttpContext.Current.Items["Accounting"] = 
                new Accounting())) as Accounting;

        }
    }

    public String currentFile = "";
    public List<string> PurchaseOrder = new List<string>();
    public List<string> item = new List<string>();
    public List<string> unitPrice = new List<string>();
    public List<string> shippingCharge = new List<string>();
    public List<string> handlingCharge = new List<string>();
    public List<string> discountAmount = new List<string>();
    public List<string> UOM = new List<string>();
    public List<string> invoiceNumber = new List<string>();
    public List<string> supplierNumber = new List<string>(); //{ get; set; }
    public List<string> supplierInvoiceNo = new List<string>();
    public List<string> account = new List<string>();
    public List<string> fund = new List<string>();
    public List<string> org = new List<string>();
    public List<string> prog = new List<string>();
    public List<string> activity = new List<string>();
    public List<string> location = new List<string>();
    public List<string> distributionType = new List<string>();
    public List<string> distributionValue = new List<string>();
    public List<int> sequence = new List<int>();
    public List<string> quantity = new List<string>();
    public List<string> dueDate = new List<string>();
}

您可以像这样使用单例:Accounting::Current.quantity

注意:

Using a static class is an antipattern in OOP. A static class is like a namespaced collection of method. You cannot instantiate objects that preventing you from using inheritance, interfaces, low coupling, dependency injection, ... Always use a singleton instead. This will help you to make a better architecture. You also should take a look at SOA (Service Oriented Architecture) in OOP and then in HTTP (REST webservices).

关于c# - 替换 .net Web 应用程序中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27345258/

相关文章:

java - 使用 JAXB 使用动态根元素解码 XML

java - 如何在 android studio 中添加 URL 到图像?

c# - C# 中用于从 DllImport 函数中检索引用的指针

c# - Web Service Credentials 从远程而不是在服务器上工作

c# - asp.net core 中的网络请求

c# - 为什么 Response.Redirect 有时会从缓存中提取?

Javascript XML DOM 技巧

C# - 两个 DateTimes 之间的持续时间(以分钟为单位)

asp.net - 如何避免在 asp.net mvc 中缓存用户控件?

c# - 我可以使用 ninject 即时更改实现吗?