2013-04-03 5 views
8

Bir MVC4 uygulamasında, özellikle sürüm 3.0.0.6'da DI için Ninject ve Ninject.MVC3 uzantısını kullanıyorum. Ninject wiki üzerinde documentation OkumaNinject.Web.MVC 3.0 ile Ninject.OnePerRequestModule dosyasını kaydettirmem gerekiyor mu?

, InRequestScope ile oluşturulan nesnelerin ömrü aslında ASP.NET tarafından kontrol edilir ve düzgün bir OnePerRequest HttpModule'ü kayıt yaptırmaları gerekiyor temizlemeye anlaşılmaktadır.

Ancak, bu doco'nun type="Ninject.OnePerRequestModule"/> ürününün güncelliğini bulamıyor gibi görünüyor.

Diğer yandan, NinjectHttpApplication ürününün OnePerRequest ile zaten ilgilendiğini öne süren yaklaşık bits numarasını okudum.

Sorum şu anda Ninject.Web.MVC 3.0'ın bu sorunla ilgilenip ilgilenmediğini ya da HttpModule'yi 'web.config' öğesine elle eklemem gerekirse.

<system.web> 
    <httpModules> 
     <add name="OnePerRequestModule" type="Ninject.Web.Common.OnePerRequestHttpModule"/> 
    </httpModules> 
    ... 

el OnePerRequest eklemek gerekir mi: Ben config ve her şeyi aşağıda eklemiş

ben hiç nesneler yok edildiğinde test etmek için nasıl hiçbir fikrim yok olsa, çalışıyor gibi görünüyor HttpModule veya Ninject.Web.MVC bunu benim için halleder mi?

cevap

9

Yürütme özeti: Hayır, web.config içinde bir şey yapmanıza gerek yoktur.

Sen tarafından elle aklı kontrol olabilir:

  • bir hata ayıklayıcı eklenirken bir Kontrolörü
  • ait ctor eklemeden şey IDisposable.InRequestScope()
  • Bağlama, koyun void Dispose()
  • bir kesme noktası elle tetikleme bir HttpRequest

Dispose 'a vurursanız, ayıyı çeken Ninject'i (ve kanıtlamak için bir çağrı yığınınız olacaktır) vurursunuz.

Ne telleri var?

public static class NinjectWebCommon 
{ 
    public static void Start() 
    { 
     ... 
     DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); 

DynamicModuleUtilityMicrosoft.Web.Infrastructure den (ve Start yöntemine çağrı tarafından tahrik edilmektedir: Ninject.Web.Common Nuget paketi ekler

WebActivator Nuget paketinden geliyor
[assembly: WebActivator.PreApplicationStartMethod(typeof(App_Start.NinjectWebCommon), "Start")] 

()


Akıcı şekilde konuşma, the docco diyor söyledi:

daha kararlı davranışı elde etmek için, aşağıdakilerden herhangi birini yapabilirsiniz:

  1. ...

  2. OnePerRequestModule'u sizin için kaydeden Ninject.Web.Common uzantılarını kullanın.

...

Sen can kayıt

(vurgu bana ait). Ben


BTW bu soruyu cevaplamak egzersiz başlangıcında, hiçbir özel bilgi, Ninject Ninject.Web.Common ve uygulamalarıma birine sadece kaynak vardı ... daha açık yapacağız.

+0

Doh! Teşekkürler Ruben ... Kendi kendime IDisposable yoluyla test yapmayı düşünmüş olmalıyım! Ve bilirsin, eğer 4 saat uyumamış olsaydım, doco'yu düzgün okumuş olabilirdim ... Yine de açıklamalarınız için teşekkürler. Vikiden çok daha detaylı. Cevap için çok çaba sarf ettiğiniz için teşekkürler. Paul. –