How to get current ApplicationContext instance at run time






3.47/5 (6 votes)
Aug 4, 2004
1 min read

55138

2
Step by step instruction how to get current ApplicationContext instance 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.
- Create a new class inherited from
ApplicationContext
.public class CurrentAppContext : ApplicationContext { CurrentAppContext() { } }
If you need to set the Main-Form for
ApplicationContext
while initializing, you can add the constructor like that as well.CurrentAppContext(Form AppMainForm) { this.MainForm = AppMainForm; }
- Create a
public static
field pointed to ourCurrentAppContext
form inside the class.public class CurrentAppContext : ApplicationContext { public static CurrentAppContext CurrentContext; CurrentAppContext() { } 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; CurrentAppContext() { CurrentContext = this; } 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 point CurrentContext
to new CurrentAppContext
instance, CurrentContext
will be referring to new instance, but not to our current ApplicationContext
. We have to add If
statement to the 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: (See below)
public class CurrentAppContext : ApplicationContext
{
private static CurrentAppContext _currContext;
CurrentAppContext()
{
if (_currContext == null)
{
_currContext = this;
}
}
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.