gpt4 book ai didi

dependency-injection - 如何创建即将到期的单例绑定(bind)?

转载 作者:行者123 更新时间:2023-12-04 20:21:37 25 4
gpt4 key购买 nike

如何为其实例在一定时间后过期的全局范围的单例对象创建绑定(bind)?一旦对象过期,我希望 Ninject 提供一个新实例,直到该实例过期,等等......

伪绑定(bind)来理解这个想法:

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);

最佳答案

您实际上是在定义一个定时范围。您可以使用自定义范围函数进行绑定(bind),并在一段时间后返回 null。

var someTimeInFuture = DateTime.Now.AddMinutes(5);
Func<IContext,object> scopeCall = ctx => DateTime.Now > someTimeInFuture ? null : someTimeInFuture;
Kernel.Bind<Foo>().ToSelf().InScope(scopeCall);

我现在无法对此进行测试,但这可能会奏效。

关于dependency-injection - 如何创建即将到期的单例绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5887003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com