当前位置 : 主页 > 手机开发 > 其它 >

依赖注入 – 如何创建过期的单例绑定?

来源:互联网 收集:自由互联 发布时间:2021-06-22
如何为一个全局范围的单例对象创建绑定,该对象的实例在一定时间后过期?一旦对象过期,我希望Ninject能够在该实例到期之前提供新的实例,等等…… 伪绑定以获得想法: BindFoo().ToSel
如何为一个全局范围的单例对象创建绑定,该对象的实例在一定时间后过期?一旦对象过期,我希望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);
您实质上是定义一个定时范围.您可以使用自定义范围函数进行绑定,并在一段时间后返回null.

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

我现在无法对此进行测试,但这可能有效.

网友评论