拦截Ninject实例激活?

我试图在WP7和Ninject上使用Caliburn Micro。 一切都很直接。 但是,一旦实例被Ninject激活,我就会被困在如何解决事件。

这是Caliburn Micro的SimpleContainer中的ActivateInstance方法,它是手机CM附带的IoC容器。

protected virtual object ActivateInstance(Type type, object[] args) { var instance = args.Length > 0 ? Activator.CreateInstance(type, args) : Activator.CreateInstance(type); Activated(instance); return instance; } 

我在Ninject中注册我的类型,当它们被激活时,我需要激活Activated事件。 我看了拦截可能是要走的路,但我不认为动态代理和林福将在手机上工作。

为了澄清更多,我没有使用SimpleContainer,上面是显示SimpleContainer在激活实例时所做的事情。 我有一个NinjectBootstrapper和一个实现IPhoneContainer的NinjectContainer。 我无法弄清楚如何实现event Action Activated; 与Ninject。

更新: .OnActivation()看起来像票。

 Kernel.Bind().To().InSingletonScope().OnActivation(); 

你走错了路。 您不应扩展SimpleContainer并使用Ninject来激活实例。 这意味着您正在使用IoC容器来获取其他IoC容器的实例。

相反,您必须更改Bootstrapper以将Ninject用作IoC容器。 网上有很多例子,例如http://caliburnmicro.codeplex.com/discussions/230861

要使用来自IPhoneContainer的Phone特定function,您很可能必须在Ninject周围放置一个包装器并实现此接口提供的方法。


更新

您可以添加IActivationStrategy,如下面的代码所示。 但请确保将其添加为最后一个策略,以防您有其他策略。

 this.Kernel.Components.Add(); this.Kernel.Components.GetAll() .OfType() .Single().Activated += ... public class ActivationNotificationActivationStrategy : NinjectComponent, IActivationStrategy { public event Action Activated; public void Activate(IContext context, InstanceReference reference) { if (this.Activated != null) { this.Activated(reference.Instance); } } public void Deactivate(IContext context, InstanceReference reference) { } } 

顺便说一句。 如果以某种方式提供最终实施,以便其他人可以利用您的工作,那将是您的最佳选择。