Introduction
When creating your own initialization module you need to add a
reference to EPiServer.Framework.dll.
The following Initialization code example shows how a property is set up with a
default implementation in Initialize and then the process is undone in
Uninitialize:
CopyC#
[InitializableModule]
public class SampleInitialization : IInitializableModule
{
public void Initialize(InitializationEngine context)
{
}
public void Uninitialize(InitializationEngine context)
{
}
public void Preload(string[] parameters)
{
}
}
Recommendations
- Allow for Initialize to be called multiple times.
If you carry out multi-step initialization in your Initialize method and if it
is re-executed because of an exception – ensure that the application handles
this scenario correctly. Example:
CopyC#
private bool _eventAttached;
public void Initialize(InitializationEngine context)
{
if (!_eventAttached)
{
SomeClass.AnEvent += MyEventHandler;
_eventAttached = true;
}
MethodThatMayThrowException();
}
This Initialize method may throw an exception after the event handler has been
hooked up. The initialization system will re-invoke the Initialize method on the
next request that reaches the web application and if the event hook-up is not
protected with a flag it would get added again.
- The initialization engine will make sure that your code executes in a
single-threaded manner. It is not necessary to lock regions when dealing with shared state etc. Note
that this guarantee is only made for Initialize and Unintialize when executing
through the initialization system. If you have custom code that makes any calls
directly into your initialization module then you may need to deal with
multi-threading issues.
- Remember that the initialization system tracks the initialization state
of your module.
- Do an implementation of Uninitialize.
Anything done by Initialize should be undone by Uninitialize. It should also be
undone in the reverse order of Initialize.
- Do not add logic to the Preload method. If you select the
option in Visual Studio to implement the IInitializableModule interface the
Preload method will be generated as “throw new NotImplementedException();”,
remember to remove this code. The Preload method has been added to support the
“Always running” concept in ASP.NET 4 but is currently not being called by
EPiServer.
Do you find this information helpful? Please log in to provide feedback.
Last updated: Mar 21, 2013