मैं ऐसे समाधान के साथ आया जो सत्र चर के ढांचे को बरकरार रखकर पोस्ट किए गए अन्य समाधानों के कुछ नुकसान से बचाता है। यह सत्र चरों को प्राप्त करने और सेट करने के लिए बस एक प्रकार का सुरक्षित शॉर्टकट है।
यह सी # है, लेकिन मैंने अंत में कुछ ऑटो-जेनरेट किए गए वीबी.नेट पोस्ट किए।
मेरे द्वारा देखे गए सर्वोत्तम समाधान (स्वीकृत उत्तर और TheObjectGuy द्वारा एक) को एक कस्टम क्लास की आवश्यकता होती है जो एक सत्र चर में संग्रहीत होती है, और उसके बाद सत्र से खींच लिया जाता है ताकि MySessionClass.Current जैसे कुछ गुणों का उपयोग किया जा सके। मेरी जायदाद।
इस समस्या में यह है कि यदि आप वर्तमान में इनप्रोक सत्र-राज्य मोड के अलावा कुछ (या भविष्य में उपयोग कर सकते हैं) (https://msdn.microsoft.com/en-us/library/ms178586%28v=vs.140%29.aspx देखें), तो पूरी कक्षा को सिंगल तक पहुंचने के लिए क्रमबद्ध करना होगा संपत्ति।
इसके अलावा, इसका मतलब है कि यदि आप उन लोगों की ज़रूरत है, तो वास्तविक सत्र द्वारा प्रदान की जाने वाली आईन्यूमेरेबल और आईसीओलेक्शन कार्यान्वयन खो देते हैं। मेरे समाधान के साथ, यदि आपको इस कार्यक्षमता की आवश्यकता है तो आप वास्तविक सत्र तक पहुंच सकते हैं।
आप आसानी से इन सत्र चर का उपयोग कर सकते हैं और वे टाइप-सुरक्षित हैं। इसका उपयोग सत्र ["माईप्रोपर्टी"] जैसे वक्तव्यों के साथ किया जा सकता है, जो एक समय में एक मौजूदा परियोजना के एक संदर्भ को बदलने की अनुमति देगा। तो:
int myInt = (int)Session["MyInt"];
Session["MyInt"] = 3;
हो जाता है:
int myInt = SessionVars.MyInt;
SessionVars.MyInt = 3;
यहाँ वास्तविक वर्ग है। कॉलरमेम्बरनाम को .NET 4.5 की आवश्यकता है, लेकिन यदि आप पुराने संस्करण का उपयोग कर रहे हैं तो भी आप संपत्ति नाम को स्पष्ट रूप से पास करके इसे प्रबंधित कर सकते हैं। इसके अलावा, गुण के प्रकार यह मानक सत्र [ "MyProp"] के रूप में बिल्कुल वैसा ही कार्य करने के लिए नल होना चाहिए कॉल क्योंकि एक गैर सेट
public static class SessionVars
{
private static T Get2<T>([System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
if (HttpContext.Current.Session[propertyName] == null)
{
return default(T);
}
return (T)HttpContext.Current.Session[propertyName];
}
private static void Set2<T>(T value, [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
HttpContext.Current.Session[propertyName] = value;
}
public static int MyInt { get { return Get2<int>(); } set { Set2<int>(value); } }
public static bool MyBool { get { return Get2<bool>(); } set { Set2<bool>(value); } }
public static string MyString { get { return Get2<string>(); } set { Set2<string>(value); } }
}
मैं भी इन गुणों को जोड़ने की सुविधा के लिए एक कोड का टुकड़ा लिखा है:
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippet Format="1.0.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<Header>
<Title>SessionVars Property</Title>
<Author>kevinpo</Author>
<Shortcut>sv</Shortcut>
<Description>Adds a property for use in a SessionVars class</Description>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<Default>int</Default>
</Literal>
<Literal>
<ID>property</ID>
<Default>PropertyName</Default>
</Literal>
</Declarations>
<Code Language="CSharp">
<![CDATA[public static $type$ $property$ { get { return Get2<$type$>(); } set { Set2<$type$>(value); } }]]>
</Code>
</Snippet>
</CodeSnippet>
मैं एक सी # पुरुष हूँ, इसलिए इस VB.NET सिर्फ स्वतः रूपांतरित http://converter.telerik.com/ कर रहा है:
Public NotInheritable Class SessionVars
Private Sub New()
End Sub
Private Shared Function Get2(Of T)(<System.Runtime.CompilerServices.CallerMemberName> Optional propertyName As String = "") As T
If HttpContext.Current.Session(propertyName) Is Nothing Then
Return Nothing
End If
Return DirectCast(HttpContext.Current.Session(propertyName), T)
End Function
Private Shared Sub Set2(Of T)(value As T, <System.Runtime.CompilerServices.CallerMemberName> Optional propertyName As String = "")
HttpContext.Current.Session(propertyName) = value
End Sub
Public Shared Property MyInt() As Integer
Get
Return Get2(Of Integer)()
End Get
Set
Set2(Of Integer)(value)
End Set
End Property
Public Shared Property MyBool() As Boolean
Get
Return Get2(Of Boolean)()
End Get
Set
Set2(Of Boolean)(value)
End Set
End Property
Public Shared Property MyString() As String
Get
Return Get2(Of String)()
End Get
Set
Set2(Of String)(value)
End Set
End Property
End Class
'=======================================================
'Service provided by Telerik (www.telerik.com)
'Conversion powered by NRefactory.
'Twitter: @telerik
'Facebook: facebook.com/telerik
'=======================================================
मेरा सुझाव है फिर से टैगिंग के रूप में सत्र-चर और सत्र-राज्य के रूप में अच्छी तरह से। –