programAction = UnityContainer.Resolve<LoaderDriver>();
(programAction as LoaderDriver).LoadComplete +=
new EventHandler(Program_LoadComplete);
Is there a configuration that let's me resolve my objects having already been wired to an event?
Alternately, is there a preferred way to achive the same result? I've noticed that sometimes when I don't see a "feature" its because a pattern I don't know about is preferred.
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.
来源:https://stackoverflow.com/questions/8539811/is-there-a-good-way-to-use-events-with-unity