Как создать привязку для одноэлементного объекта глобальной области действия, срок действия экземпляра которого истекает через некоторое время? После истечения срока действия объекта я бы хотел, чтобы 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);