2014-07-17 18 views
5

Unity3'ü MVC5 ile kullanıyorum ve istek ömür boyu yöneticisine ihtiyacım var. Ancak, web uygulamasını başlattığımda, "Uygulama başlatıldıktan sonra bir modül kaydedilemiyor" diyerek sunucu hatası aldım. Sorun DynamicModuleUtility tarafından kaynaklanmaktadır. Bu problem nasıl çözülür?MVC 5 ile UnityPerRequestHttpModule kaydederken özel durum

public static void Start() 
{ 
    var container = UnityConfig.GetConfiguredContainer(); 

    FilterProviders.Providers.Remove(FilterProviders.Providers.OfType<FilterAttributeFilterProvider>().First()); 
    FilterProviders.Providers.Add(new UnityFilterAttributeFilterProvider(container)); 
    DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 

    //use per request life time manager 
    DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); 
} 
+1

Hiç bunu çözdünüz mü? –

cevap

1

MVC için, bunu App_Start klasöründeki bir sınıfa yerleştirmek istersiniz. MVC için bir nuget paketi olarak bir birlik eklerseniz, bu klasörde UnityMvcActivator adlı bir sınıf oluşturması gerektiğini düşünüyorum.

0

Benzer bir sorunla karşılaştım.

DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); 

ve ben aynı problem vardı Unity.Mvc.Activator.cs

// TODO: Uncomment if you want to use PerRequestLifetimeManager 
      Microsoft.Web.Infrastructure.DynamicModuleHelper.DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); 
8

bu ekleme: Aşağıdaki UnityConfig.cs dan kaldırarak bu çözüldü. Benim sorunum:

GlobalAsax.Application_Start() yönteminde yazmıştım.

UnityMvcActivator.Start(); 

Bunu kaldırdığımda, her şey çalıştı. Eğer UnityMvcActivator sınıfını kullandığınızda Başlat yöntem zaten açıklama yoluyla denir:

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(TrackingServer.App_Start.UnityWebActivator), "Start")] 

Yani yine dosyasını Global.asax UnityMvcActivator yöntemlerini aramaya gerek yoktur.