일정 기간 후에 인스턴스가 만료되는 전역 적으로 범위가 지정된 싱글 톤 객체에 대한 바인딩을 만들려면 어떻게해야합니까? 개체가 만료되면 해당 인스턴스가 만료 될 때까지 나는 ... 등, 새로운 인스턴스를 제공하기 위해 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);
당신은 일반적으로 서비스를 캐시하지 않으려는 것에서 명명 된 범위를 확장이지만, 데이터는 이러한 서비스를 관리 할 수 있습니다. 그런데 왜 실제로 이것을하고 싶습니까? – Steven
나는 당신이 말하는 것을 완전히 이해합니다. 이것은 어떤 중요한 아키텍처 변경도하지 않고 brownfield 앱에서 값싼 캐싱을 얻는 데 사용되었습니다 ... 우리는 아키텍처를 변경하지 않고 몇 가지 문제 점에서 성능을 향상시키기위한 목적으로 안티 패턴을 사용했음을 의미합니다. –
설명해 주셔서 감사합니다. 그게 합당한 이유 같아. 결국 (소프트웨어) 엔지니어링은 모두 절충안에 관한 것입니다. – Steven