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