我没有遇到任何问题,但我正在努力防止将来出现问题,并希望得到一些帮助以找出解决此问题的正确方法。我有一个供应商将 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/