programAction = UnityContainer.Resolve();
(programAction as LoaderDriver).LoadComplete +=
new EventHandler(Program_LoadComplete);
Yes there is a way. You would have to write an extension that adds a custom BuilderStrategy to the PostInitialization stage of the Unity BuildPipeline.
The code for extension and strategy should look similar to this:
public class SubscriptionExtension : UnityContainerExtension
{
protected override void Initialize()
{
var strategy = new SubscriptionStrategy();
Context.Strategies.Add(strategy, UnityBuildStage.PostInitialization);
}
}
public class SubscriptionStrategy : BuilderStrategy
{
public override void PostBuildUp(IBuilderContext context)
{
if (context.Existing != null)
{
LoaderDriver ld = context.Existing as LoaderDriver;
if(ld != null)
{
ld.LoadComplete += Program_LoadComplete;
}
}
}
}
Then you add the extension to the container
container.AddNewExtension<SubscriptionExtension>();
And when you resolve your LoaderDriver instance it will automatically subscribe to the EventHandler.
You can find a working sample that subscribes classes to an EventAggregator in the TecX project. The source code is located in the TecX.Event.Unity project.
I wrote a Unity Event Broker that you might find useful. See this post.