6

在 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 中有什么方法可以做到这一点吗?

4

2 回答 2

14

如果不能将要执行的代码放在构造函数中,可以实现IInitializableor IStartable。前者提供了Initialize()在所有注入完成后调用的方法,后者提供了 aStart()Stop()方法,分别在激活和停用期间调用。

于 2009-08-05T03:01:38.320 回答
10

我遇到了同样的问题,但我无法使用 Nate 的解决方案,因为我无法使类型 implement IInitializable。如果您在类似的情况下,您可以使用.OnActivation并避免修改目标类型的定义:

Bind<SomeClass>().ToSelf().OnActivation(x => ((SomeClass)x).MyInitialize());

您可以看到我们如何MyInitialize在类的激活(实例化)时调用一些任意的初始化方法()。

这样做的好处是不会在您自己的类中对 Ninject 产生硬依赖(当然,除了您的模块),从而允许您的类型对最终使用的 DI 框架保持不可知论。

于 2012-05-30T16:18:10.623 回答