Wie deklarieren Sie globale Variablen in ASP.NET MVC?
c#
.net
asp.net
asp.net-mvc
global-variables
Anfänger
quelle
quelle
Antworten:
public static class GlobalVariables { // readonly variable public static string Foo { get { return "foo"; } } // read-write variable public static string Bar { get { return HttpContext.Current.Application["Bar"] as string; } set { HttpContext.Current.Application["Bar"] = value; } } }
quelle
Technisch gesehen ist jede statische Variable oder Eigenschaft in einer Klasse an einer beliebigen Stelle in Ihrem Projekt eine globale Variable, z
public static class MyGlobalVariables { public static string MyGlobalString { get; set; } }
Aber wie @SLaks sagt, können sie "möglicherweise" schlecht und gefährlich sein, wenn sie nicht richtig gehandhabt werden. In diesem obigen Beispiel hätten Sie beispielsweise mehrere Anforderungen (Threads), die versuchen, auf dieselbe Eigenschaft zuzugreifen. Dies könnte ein Problem sein, wenn es sich um einen komplexen Typ oder eine Sammlung handelt. Sie müssten eine Form der Sperrung implementieren.
quelle
Sie können sie in die Anwendung einfügen:
Application["GlobalVar"] = 1234;
Sie sind nur innerhalb der aktuellen IIS / Virtual-Anwendung global. Dies bedeutet, dass sie in einer Webfarm lokal auf dem Server und in dem virtuellen Verzeichnis sind, das das Stammverzeichnis der Anwendung ist.
quelle
Für nicht statische Variablen habe ich sie wie folgt über das Anwendungsklassenwörterbuch sortiert :
Bei Global.asax.ac:
namespace MvcWebApplication { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class MvcApplication : System.Web.HttpApplication { private string _licensefile; // the global private variable internal string LicenseFile // the global controlled variable { get { if (String.IsNullOrEmpty(_licensefile)) { string tempMylFile = Path.Combine(Path.GetDirectoryName(Assembly.GetAssembly(typeof(LDLL.License)).Location), "License.l"); if (!File.Exists(tempMylFile)) File.Copy(Server.MapPath("~/Content/license/License.l"), tempMylFile, true); _licensefile = tempMylFile; } return _licensefile; } } protected void Application_Start() { Application["LicenseFile"] = LicenseFile;// the global variable's bed AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } } }
Und im Controller:
namespace MvcWebApplication.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(HttpContext.Application["LicenseFile"] as string); } } }
Auf diese Weise können wir globale Variablen in ASP.NET MVC haben :)
HINWEIS: Wenn Ihr Objekt keine Zeichenfolge ist, schreiben Sie einfach:
return View(HttpContext.Application["X"] as yourType);
quelle
Application
Klassenwörterbuch.Sie können auch eine statische Klasse verwenden, z. B. eine Config-Klasse oder etwas in dieser Richtung ...
public static class Config { public static readonly string SomeValue = "blah"; }
quelle
Der Stahl ist alles andere als heiß, aber ich habe die Lösung von @ abatishchev mit der Antwort aus diesem Beitrag kombiniert und bin zu diesem Ergebnis gekommen. Hoffe es ist nützlich:
public static class GlobalVars { private const string GlobalKey = "AllMyVars"; static GlobalVars() { Hashtable table = HttpContext.Current.Application[GlobalKey] as Hashtable; if (table == null) { table = new Hashtable(); HttpContext.Current.Application[GlobalKey] = table; } } public static Hashtable Vars { get { return HttpContext.Current.Application[GlobalKey] as Hashtable; } } public static IEnumerable<SomeClass> SomeCollection { get { return GetVar("SomeCollection") as IEnumerable<SomeClass>; } set { WriteVar("SomeCollection", value); } } internal static DateTime SomeDate { get { return (DateTime)GetVar("SomeDate"); } set { WriteVar("SomeDate", value); } } private static object GetVar(string varName) { if (Vars.ContainsKey(varName)) { return Vars[varName]; } return null; } private static void WriteVar(string varName, object value) { if (value == null) { if (Vars.ContainsKey(varName)) { Vars.Remove(varName); } return; } if (Vars[varName] == null) { Vars.Add(varName, value); } else { Vars[varName] = value; } } }
quelle