Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Alsalam alikom wa ra7mat Allah wa barakatoh (Peace upon you)
I was designing some classes today and I got stuck with an old problem I used to fix in an ugly way…
class A
{
public static void InitializeMe()
{
SomeClassManager.Listeners.Add(typeof(A));
}
}
It would have been easy if:
- You know when exactly to call InitializeMe() so that you get hooked up at the right time (before Listeners start iterating over its elements)
- You know what classes contain an InitializeMe function.. you can use reflection to get a list of all classes and then check whether they have the method or not.. –you can’t use interfaces as they don’t allow static members-
What if you are designing a plugin model for an application, and want to call some static initialization code… again you will have to do reflection (which is slow).
And here comes static constructors!
class A
{
static A()
{
InitializeMe();
}
public static void InitializeMe()
{
SomeClassManager.Listeners.Add(typeof(A));
}
}
That simple.. Static Constructor [MSDN Link] will be called once this type is “loaded” which happens in .NET when your assembly first gets loaded into memory.. which is exactly the time I wanted… and it saved my day!
P.S, Check MEF (Managed Extensibility Framework) if you are interested in supporting plugins in ur apps, https://www.codeplex.com/MEF
And here is a getting started guide, https://code-inside.de/blog-in/2008/11/19/howto-first-steps-with-mef-hello-mef/
Comments
- Anonymous
May 21, 2009
PingBack from http://microsoft-sharepoint.simplynetdev.com/static-constructor%e2%80%a6-saved-my-day/