Skip to main content
 首页 » 编程设计

c#之每个请求调用的 ASP.NET Web API Controller 构造函数

2024年01月22日25luoye11

我正在寻找创建一个非常简单的 Web 服务,它为两个数据点随机生成数据,并通过 Web 服务使该数据可访问。我决定尝试使用 ASP.NET Web API。

这是我的 DataGenerator 类:

public class DataGenerator 
{ 
    private Random rand; 
    private Double range; 
    private Double sample; 
    private Double scaled; 
 
    public DataGenerator(string name, string units, double min, double max, int updateRate) 
    { 
        try 
        { 
            Name = name; 
            Units = units; 
            Min = min; 
            Max = max; 
            UpdateRate = updateRate; 
 
            Timer timer = new Timer(); 
            timer.Interval = updateRate; 
            timer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
            timer.Start(); 
 
            rand = new Random(); 
            range = max - min; 
            Debug.WriteLine("Instantiated"); 
        } 
        catch (Exception ex) 
        { 
            Debug.WriteLine("Error in Data Generator: " + ex.Message); 
        } 
 
    } 
 
    private void OnTimedEvent(object sender, ElapsedEventArgs e) 
    { 
        try 
        { 
            range = Max - Min; 
            sample = rand.NextDouble(); 
            scaled = (sample * range) + Min; 
 
            Value = scaled; 
            Debug.WriteLine("Value = " + Value); 
        } 
        catch (Exception ex) 
        { 
            Debug.WriteLine("Error in Data Generator: " + ex.Message); 
        } 
    } 
 
    public string Name { get; } 
    public string Units { get; } 
    public double Min { get; set; } 
    public double Max { get; set; } 
    public int UpdateRate { get; set; } 
    public double Value { get; private set; } 
} 

这是我的 ApiController 类,它实例化了两个 DataGenerator 对象:
public class DataGeneratorsController : ApiController 
{ 
    DataGenerator[] generators; 
 
    public DataGeneratorsController() 
    { 
        generators = new DataGenerator[] 
        { 
            new DataGenerator("Temperature", "deg F", 0.0, 200.0, 1000), 
            new DataGenerator("Pressure", "psi", 0.0, 100.0, 1000) 
        }; 
    } 
 
    public IEnumerable<DataGenerator> GetAllDataGenerators() 
    { 
        Debug.WriteLine("Temp = " + generators[0].Value.ToString() + " Pressure = " + generators[1].Value.ToString()); 
        return generators; 
    } 
} 

在 Debug模式下,我可以在 DataGenerator 类中看到数据生成得很好,但它在 ApiController 类中始终显示为 0,我发现这是因为每次发出请求时都会重新实例化它从浏览器。

我该如何解决这个问题?我不明白为什么每次都会调用构造函数。我在网上找到了很多关于依赖注入(inject)的东西,但我不明白这如何解释我的问题。

我可能在这里遗漏了一些非常明显的东西,因为我是 C# 和 Web API 的新手。

请您参考如下方法:

默认服务行为是无状态的,这意味着 - 是的,它每次都会被实例化。
在网上阅读有关 asp.net 中的应用程序状态的信息。
阅读有关 Session 对象、Cache 对象、Application 对象的信息,也许还有一些关于数据库中数据持久性的信息。

祝你好运。