Aar*_*ide 6 c# events unity-container
programAction = UnityContainer.Resolve<LoaderDriver>();
(programAction as LoaderDriver).LoadComplete +=
new EventHandler(Program_LoadComplete);
Run Code Online (Sandbox Code Playgroud)
是否有一个配置让我解决我已连接到事件的对象?
或者,是否有一种获得相同结果的首选方法?我注意到有时当我没有看到"特征"时,因为我不知道的模式是首选.
是的,有办法。您必须编写一个扩展,将自定义 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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后将扩展添加到容器中
container.AddNewExtension<SubscriptionExtension>();
Run Code Online (Sandbox Code Playgroud)
当您解析 LoaderDriver 实例时,它将自动订阅 EventHandler。
您可以在TecX项目中找到一个将类订阅到 EventAggregator 的工作示例。源代码位于TecX.Event.Unity项目中。