在Unity中是否存在使用事件的好方法?

本文关键字:事件 方法 Unity 是否 存在 | 更新日期: 2023-09-27 18:18:18

programAction = UnityContainer.Resolve<LoaderDriver>();
(programAction as LoaderDriver).LoadComplete +=
    new EventHandler(Program_LoadComplete);

是否有一个配置,让我解决我的对象已经连接到一个事件?

或者,是否有更好的方法来实现相同的结果?我注意到,有时当我没有看到一个"特性"时,这是因为我不知道的模式是首选的。

在Unity中是否存在使用事件的好方法?

是有办法的。你必须编写一个扩展,在Unity BuildPipeline的PostInitialization阶段添加一个自定义BuilderStrategy。

扩展和策略的代码应该类似于:

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;
      }
    }
  }
}
然后将扩展名添加到容器
container.AddNewExtension<SubscriptionExtension>();

当你解析LoaderDriver实例时,它会自动订阅EventHandler。

你可以在TecX项目中找到一个为EventAggregator订阅类的工作示例。源代码位于TecX.Event中。统一项目