2011-06-08 28 views
5

Ben ReqeustScope() ile bir nesneyi bir bağlama tanımlamak ve sonra bu tür bir istek dışında Kernel.Get<T> çağrı, çözümlenen nesnenin kapsamı ne olacak?RequestScope() ve Kernel.Get <> in</ a0> içinde <a1>

+0

Benzer bir şeyin nasıl yapıldığını bilmek istiyorum. İstekte yapılan kararlarım var ve bazı fabrikalar talepten sonra da devam ediyor. NamedScope ve ContextPreservation kullanarak, bir mantıksal istek bağlamındaki şeyleri çözmemde bana yardımcı olmadı. –

cevap

10

StandardScopeCallbacks dersini incelersek, istek kapsamının geri çağrısının geçerli HTTP bağlamı olduğunu görebiliriz. Geçici bir nesnenin geri dönüşü boştur. Bir isteğin dışında bir hizmeti çözerseniz, geçerli HTTP bağlamı sıfırdır. Dolayısıyla, kapsam aşağıdaki testin açık olduğu gibi dolaylı olarak geçicidir.

[Test] 
public void ServiceInRequestScopeIsImplicitTransientWhenHttpContextIsNull() 
{ 
    var kernel = new StandardKernel(); 
    kernel.Bind<ServiceInRequestScope>().ToSelf().InRequestScope(); 

    Assert.That(HttpContext.Current, Is.Null); 

    var service0 = kernel.Get<ServiceInRequestScope>(); 
    var service1 = kernel.Get<ServiceInRequestScope>(); 

    Assert.That(service0, Is.Not.SameAs(service1)); 
} 
İlgili konular