是否有一种使用Unity的事件的好方法?

时间:2011-12-16 20:35:03

标签: c# events unity-container

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

是否有配置允许我解析已连接到事件的对象?

或者,是否有一种获得相同结果的首选方法?我注意到有时当我没有看到“特征”时,因为我不知道的模式是首选。

2 个答案:

答案 0 :(得分:4)

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

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

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.Unity 项目中。

答案 1 :(得分:0)

我写了一个你可能觉得有用的Unity事件代理。请参阅this post