如何为一个全局范围的单例对象创建绑定,该对象的实例在一定时间后过期?一旦对象过期,我希望Ninject能够在该实例到期之前提供新的实例,等等……
伪绑定以获得想法:
Bind<Foo>().ToSelf() .InSingletonScope() .WithExpiration(someTimeSpan);
我不是在寻找那种确切的语法,而是一种最终获得所需结果的方法.本质上,它就像使用Ninject作为滑动应用缓存一样.
更新
伊恩建议的方法是正确的.我只需稍微调整一下,因为使用DateTime作为上下文键由于某种原因不起作用.这是我最终得到的:
var someTimeInFuture = DateTime.Now.AddSeconds(10); var fooScopeObject = new object(); Func<IContext,object> scopeCall = ctx => { if (someTimeInFuture < DateTime.Now) { someTimeInFuture = DateTime.Now.AddSeconds(10); fooScopeObject = new object(); } return fooScopeObject; }; Kernel.Bind<Foo>() .ToSelf() .InScope(scopeCall);