依赖注入 – 如何创建过期的单例绑定?
发布时间:2020-12-13 20:45:00 所属栏目:百科 来源:网络整理
导读:如何为一个全局范围的单例对象创建绑定,该对象的实例在一定时间后过期?一旦对象过期,我希望Ninject能够在该实例到期之前提供新的实例,等等…… 伪绑定以获得想法: BindFoo().ToSelf() .InSingletonScope() .WithExpiration(someTimeSpan); 我不是在寻找那
如何为一个全局范围的单例对象创建绑定,该对象的实例在一定时间后过期?一旦对象过期,我希望Ninject能够在该实例到期之前提供新的实例,等等……
伪绑定以获得想法: Bind<Foo>().ToSelf() .InSingletonScope() .WithExpiration(someTimeSpan); 我不是在寻找那种确切的语法,而是一种最终获得所需结果的方法.本质上,它就像使用Ninject作为滑动应用缓存一样. 更新 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);
您实质上是定义一个定时范围.您可以使用自定义范围函数进行绑定,并在一段时间后返回null.
var someTimeInFuture = DateTime.Now.AddMinutes(5); Func<IContext,object> scopeCall = ctx => DateTime.Now > someTimeInFuture ? null : someTimeInFuture; Kernel.Bind<Foo>().ToSelf().InScope(scopeCall); 我现在无法对此进行测试,但这可能有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |