我有一个我用Ninject注入的组件,它有一个成员函数,必须在实例化之后被调用。我没有把它放在构造函数中,因为它需要引用它的父对象,这将创建一个循环引用。
目前,我只是在 parent的构造函数中调用该方法,但如果我可以让Ninject为我运行该方法,那么它会更清晰并且不太可能被遗忘。
由于缺乏文档,我一直在摆弄OnActivation
,但似乎无法让它发挥作用。
基本上我想做的是:
Bind<IMessageService>().To<QueuedMessageService>().InSingletonScope()
.OnActivation((ctx, svc) => { svc.SubscribeAll(ctx.Request.Target); });
其中SubscribeAll(object target)
AM我甚至走在正确的道路上还是我在左外野的路上?谢谢!
答案 0 :(得分:2)
您可以使用IInitializable
界面:
public class Parent : Ninject.IInitializable
{
private readonly IMessageService service;
public Parent(IMessageService service)
{
this.service = service;
}
public void Initialize()
{
service.SubscribeAll(this);
}
}
初始化方法将由ninject自动调用。