Advice on using StackFrame and reflection in BLL to return property values
"Eames, Andrew" <[email protected]>
| Newsgroups | gmane.comp.windows.devel.dotnet.cx |
|---|---|
| Message-ID | <[email protected]> |
In a release build, the stack frames won't necessarily correspond to the functions in your source code as some functions may get inlined Andrew -----Original Message----- From: Discussion relating to the specifics of the C# and Managed C++ languages [mailto:[email protected]] On Behalf Of Mark Johnson Sent: Monday, September 25, 2006 12:50 PM To: [email protected] Subject: [Spam:***** SpamScore] [DOTNET-CX] Advice on using StackFrame and reflection in BLL to return property values Just for fun I was playing around with creating an interface to a permissions object and ended up with this. Just wondering if C# community thought this is a good solution or not. What I ended up doing was instead of writing a lot of non-generic redundant code peppered with literals to access some permission settings I used the stack frame to figure out which defined property was getting called by the client and than querying the cached dataset for the results. I fully understand that just because I can doesn't mean I should but I was impressed by what I could do with C# to cut down on what could have been a lot of messy and redundant code. What do you think? thanks for your time! public class Permissions { protected Nimbus.PermissionsDataTable thePerms = null; public Permissions( string aUsername ) { thePerms = (new PermissionsTableAdapter()).GetData(aUsername); } protected bool getPerm() { System.Diagnostics.StackTrace st = new System.Diagnostics.StackTrace(1); System.Diagnostics.StackFrame sf = st.GetFrame(0); string perm = sf.GetMethod().Name.Replace("get_",""); bool rv = false; try { DataRow[] rows = thePerms.Select( String.Format("Permission='{0}'",perm) ); // etc... } catch( Exception ) { } return rv; } public bool Admin { get { return getPerm(); } } public bool CreateBudget { get { return getPerm(); } } public bool EditLineItem { get { return getPerm(); } } // etc... }; =================================== This list is hosted by DevelopMentor(r) http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com =================================== This list is hosted by DevelopMentor® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com