How to find current ApplicationContext at run time






1.63/5 (10 votes)
Aug 4, 2004
1 min read

40680

2
How to find current ApplicationContext at run time.
Introduction
While I was working on one of my projects, I got into a situation where I needed to get the current ApplicationContext
instance from one part of my software. I started my research on MSDN, then on the Internet. As some of you probably already know by reading this article, I did not find the results I was looking for. I cannot understand why there is no easy way to get the current ApplicationContext
instance with regular MS defined properties or methods. I have, however, created a simple solution.
The code
- Create a new class inherited from
ApplicationContext
:public class CurrentAppContext : ApplicationContext { public CurrentAppContext() {} }
If you need to set the Main Form for
ApplicationContext
while initializing it, you can add the constructor like this as well:public CurrentAppContext(Form AppMainForm) { this.MainForm = AppMainForm; }
- Create a
public static
field of our class of typeCurrentAppContext
inside of the class.public class CurrentAppContext : ApplicationContext { public static CurrentAppContext CurrentContext; public CurrentAppContext() {} public CurrentAppContext(Form AppMainForm) { this.MainForm = AppMainForm; } }
- Because
static
class fields exist only once and are not created again, when we create a new class instance, we can initialize our field from the constructor.public class CurrentAppContext : ApplicationContext { public static CurrentAppContext CurrentContext; public CurrentAppContext() { CurrentContext = this; } public CurrentAppContext(Form AppMainForm) : this() { this.MainForm = AppMainForm; } }
- If you need to get the
ApplicationContext
at run time, we will create a new instance ofCurrentAppContext
and getCurrentContext
, which is exactly what we need (see below):CurrentAppContext _curContext = (new CurrentAppContext()).CurrentContext;
OOPS! Because we initialize
CurrentAppContext()
again and pointCurrentContext
to newCurrentAppContext
instance,CurrentContext
will be referring to the new instance, but not to our currentApplicationContext
. We have to add (If
) statement to constructor and make sure that if theCurrentContext
is notnull
, we do not make a new assignment. Also, let’s convertpublic
field to Read Only property.
Final class will look something like this:
public class CurrentAppContext : ApplicationContext
{
private static CurrentAppContext _currContext;
public CurrentAppContext()
{
if (_currContext == null)
{_currContext = this;}
}
public CurrentAppContext(Form AppMainForm) : this()
{
this.MainForm = AppMainForm;
}
public CurrentAppContext CurrentContext
{get { return _currContext; }}
}
Now, you can create it inside Main()
as usual and get it from any part of your software. If necessary, you can extend it with new fields and methods.