¿Cómo puedo crear un enlace para un objeto singleton con ámbito global cuya instancia caduque después de un cierto período de tiempo? Una vez que el objeto ha expirado me gustaría Ninject para servir a una nueva instancia hasta que expire instancia, etc ...¿Cómo creo un enlace singleton que caduque?
Pseudo unión a transmitir la idea de:
Bind<Foo>().ToSelf()
.InSingletonScope()
.WithExpiration(someTimeSpan);
No estoy buscando esa sintaxis exacta, sino más bien una forma de terminar con el resultado deseado. En esencia, sería como usar Ninject como un caché de aplicaciones deslizante.
Actualización La metodología que Ian sugirió era correcta. Solo tuve que ajustarlo un poco porque usar un DateTime como la clave de contexto no funcionó por alguna razón. Esto es lo que terminé con:
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);
Que normalmente no desea almacenar en caché los servicios, pero los datos de los servicios de gestión. Entonces, ¿por qué realmente quieres hacer esto? – Steven
Entiendo completamente lo que dices. Esto se usó para conseguir un almacenamiento en caché barato en una aplicación brownfield sin hacer ningún cambio arquitectónico importante ... lo que significa que fuimos con un antipatrón a propósito para buscar algún rendimiento en un par de lugares problemáticos sin cambiar la arquitectura. –
Gracias por aclarar. Eso suena como una razón válida. Al final, la ingeniería (software) se trata de intercambios. – Steven