Is there a good way to use events with Unity?

Deadly 提交于 2019-12-01 04:33:05

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!