Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将全局列表转换为MVC控制器_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 将全局列表转换为MVC控制器

C# 将全局列表转换为MVC控制器,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我的问题是,当应用程序启动时,我需要将一大串字符串加载到应用程序中,并且我需要能够访问所有视图和控制器,就像全局列表一样。 我正在使用MVC和存储库。 因此,该列表由数据库中的存储库方法提供。 若我把它放到global.asax中,我就可以访问存储库接口。 有什么想法吗? 谢谢您的帮助。假设列表不是太大,不会占用您所有的服务器内存,您可以将列表粘贴到缓存中,但我不会在您的控制器中这样做。最好创建一个自定义的ValueProvider或使用依赖项注入框架,这样可以避免将操作与HttpContext

我的问题是,当应用程序启动时,我需要将一大串字符串加载到应用程序中,并且我需要能够访问所有视图和控制器,就像全局列表一样。 我正在使用MVC和存储库。 因此,该列表由数据库中的存储库方法提供。 若我把它放到global.asax中,我就可以访问存储库接口。 有什么想法吗?
谢谢您的帮助。

假设列表不是太大,不会占用您所有的服务器内存,您可以将列表粘贴到缓存中,但我不会在您的控制器中这样做。最好创建一个自定义的ValueProvider或使用依赖项注入框架,这样可以避免将操作与HttpContext耦合。模仿HttpContext很难看,最好是将其抽象出来。

假设列表不会太大,以至于会占用您所有的服务器内存,您可以将列表粘贴到缓存中,但我不会在您的控制器中这样做。最好创建一个自定义的ValueProvider或使用依赖项注入框架,这样可以避免将操作与HttpContext耦合。模仿HttpContext很难看,最好是将其抽象出来。

为什么不能在控制器中实例化存储库的实例,并在需要时从数据库中提取列表?全局变量/对象通常是一种不好的做法,在开发人员考虑使用它们的大多数情况下实际上并不必要。只需在控制器构造中实例化您的存储库定义“大列表”。我们在这里讨论的是多大?我不反对静态只读列表的全局变量,但也许更好的替代方法是System.Web.Cache。它的优势在于,您可以在列表上设置超时,要求每隔(指定的时间间隔)刷新一次。如果更新列表,还可以刷新缓存,这将导致重新加载列表。您可以编写一个函数,如果缓存的值存在,则返回该值;如果不存在,则从数据库中获取列表,缓存该列表,然后返回该列表。该列表有500个字符串元素。为什么您不能在控制器中实例化存储库的实例,并在需要时从数据库中提取该列表?全局变量/对象通常是一种不好的做法,在开发人员考虑使用它们的大多数情况下实际上并不必要。只需在控制器构造中实例化您的存储库定义“大列表”。我们在这里讨论的是多大?我不反对静态只读列表的全局变量,但也许更好的替代方法是System.Web.Cache。它的优势在于,您可以在列表上设置超时,要求每隔(指定的时间间隔)刷新一次。如果更新列表,还可以刷新缓存,这将导致重新加载列表。您可以编写一个函数,如果缓存的值存在,则返回该值;如果列表不存在,则从数据库中获取列表、缓存并返回该列表。该列表包含500个字符串元素