Ninject的OnActivation何时被解雇?

时间:2011-09-28 22:07:10

标签: ninject

我确信这是一个愚蠢的问题,因为我假设答案是“当对象被Ninject实例化时”......但我想仔细检查......

为了提供更多关于我为什么问这个问题的背景,我有一个实现NinjectHttpApplication的asp mvc应用程序。但是在OnApplicationStarted覆盖中,我需要在Ninject中绑定的单例实例上激活方法。

问题是内核是暴露的,但不应该用作服务定位器,所以我可以从中获取对象并调用DoSomeSetup();方法,但这似乎是一个失败。据我所知,NinjectHttpApplication实例不是DI,因为Global.asax文件直接使用它,所以我不能将它直接用于应用程序。

这给我留下了另外一个选项,即添加OnActivation(x => x.DoSomeSetup());调用绑定,但是这个对象只在某些地方使用,所以它不像第一次加载页面时控制器需要它,所以如果OnActivation等待创建第一个实例,它可能不会发生一会儿。

希望这不会太混乱:)。

1 个答案:

答案 0 :(得分:2)

是的,您的假设是正确的(或至少大部分是正确的)。激活操作在第一次解析实例时运行,即使不是由Ninject创建的(例如常量)

对于HttpApplication,您可以使用属性注入。