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 type CurrentAppContext
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 of CurrentAppContext
and get CurrentContext
, which is exactly what we need (see below): CurrentAppContext _curContext = (new CurrentAppContext()).CurrentContext;
OOPS! Because we initialize CurrentAppContext()
again and point CurrentContext
to new CurrentAppContext
instance, CurrentContext
will be referring to the new instance, but not to our current ApplicationContext
. We have to add (If
) statement to constructor and make sure that if the CurrentContext
is not null
, we do not make a new assignment. Also, let�s convert public
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.