C# 可以访问C REST API控制器中的非静态对象吗?

C# 可以访问C REST API控制器中的非静态对象吗?,c#,C#,可以访问C REST API控制器中的非静态对象吗 有关说明: 我想为一个项目编写一个REST-API。数据来自数据库。但我不想在每次触发请求时都询问数据库。因此,我有一个对象生成器,它与数据库对话并缓冲结果 我从一开始就直接创建对象,它保持自身活动并刷新其内部数据 但是如何将对象赋予REST控制器ValuesController 我不想每次有人需要新数据时都创建对象 示例代码: namespace GenAPI { public class Program {

可以访问C REST API控制器中的非静态对象吗

有关说明:

我想为一个项目编写一个REST-API。数据来自数据库。但我不想在每次触发请求时都询问数据库。因此,我有一个对象生成器,它与数据库对话并缓冲结果

我从一开始就直接创建对象,它保持自身活动并刷新其内部数据

但是如何将对象赋予REST控制器ValuesController

我不想每次有人需要新数据时都创建对象

示例代码:

namespace GenAPI
{
    public class Program
    {
        public static void Main(string[] args)
        {
            GenAPI gen = new GenAPI(); // gen.table is the object of intrest

            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args)
        {
            var wh = WebHost.CreateDefaultBuilder(args);
            wh.UseUrls("http://*:4999");
            wh.UseSetting("windowsAuthentication", "false");
            wh.UseSetting("anonymousAuthentication", "true");

            var iwh = wh.UseStartup<Startup>().Build();

            return iwh;
        }
    }

    public class Startup
    {
        public Startup(IConfiguration configuration) { Configuration = configuration; }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services) { services.AddMvc(); }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
            if (env.IsDevelopment())
                app.UseDeveloperExceptionPage();

            app.UseMvc();
        }
    }
}

namespace GenAPI.Controllers
{
    [Route("")]
    public class ValuesController : Controller
    {      

        //[HttpGet]
        //public IEnumerable<string> Get()
        //{
        //    return new string[] { "value1", "value2" };
        //}

        [HttpGet("{url}")]
        public IEnumerable<string> Get(string url)
        {
            List<string> result = new List<string>();

            //foreach (var r in gen.table.Rows)        // <-- Here I want do get the data 
            //    result.Add(r[0]);

            return result;
        }

        [HttpPost]
        public void Post([FromBody]string value)
        {
        }

        [HttpPut("{id}")]
        public void Put(int id, [FromBody]string value)
        {
        }

        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }
}

我们也有同样的要求,我们所做的是创建一个全局类,其中包含一个静态属性,即缓存的数据:

public class Global
{
    private static CacheObject _cache;
    public static CacheObject cacheObject
    {
        get
        {
            if(_cache == null)
            {
                InitializeCacheObject();
            }
            return _cache;
        }
        set
        {
            _cache=Value;
        }
    }
    public void InitializeCacheObject()
    {
        //get your data from db
        CacheObject = db.getData();
    }
}
在控制器中,可以执行以下操作:

var model = Global.CacheObject.Rows.ToList();

看看依赖注入: