在Ninject的依赖注入中,如果你像这样设置类的绑定:
Bind<SomeClass>().ToSelf();
Ninject很好地解析了SomeClass所有的依赖关系,并为你提供了对象。我希望能够在每次创建新事件时返回它返回的SomeClass,就像后处理事件一样。我可以使用.ToMethod(或ToFactoryMethod)绑定来显式地修改它,但我希望它的所有依赖项都可以事先由Ninject解决。
做一些像这样的事情会很好:
Bind<SomeClass>()
.ToSelf()
.After(sc => sc.MethodIWantToCall()); // then after here, Ninject returns the object.
在Ninject 1.0 / 1.1中有没有办法做到这一点?
答案 0 :(得分:13)
如果您无法在构造函数中放置要执行的代码,则可以实现IInitializable
或IStartable
。前者提供了一个Initialize()
方法,在所有注入完成后调用,后者提供Start()
和Stop()
方法,分别在激活和停用期间调用。
答案 1 :(得分:10)
我遇到了同样的问题,但我无法使用Nate的解决方案,因为我无法创建类型实现IInitializable
。如果您在类似的船上,可以使用.OnActivation
并避免必须修改目标类型的定义:
Bind<SomeClass>().ToSelf().OnActivation(x => ((SomeClass)x).MyInitialize());
您可以看到在激活(实例化)类时我们如何调用一些任意初始化方法(MyInitialize
)。
这样做的好处是不会在你自己的类中对Ninject进行硬依赖(当然除了模块之外),因此允许你的类型对你最终使用的DI框架保持不可知。