2014-07-17 1 views
5

Uso Unity3 con MVC5 e ho bisogno di un gestore della durata di vita per ogni richiesta. Tuttavia, quando lancio l'app Web, ho ricevuto un messaggio di errore del server che diceva "Impossibile registrare un modulo dopo l'inizializzazione dell'applicazione". Il problema è causato da DynamicModuleUtility. Come risolvere questo problema?Eccezione durante la registrazione di UnityPerRequestHttpModule con MVC 5

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

Hai mai risolto questo? –

risposta

1

Per MVC, si desidera inserirlo in una classe nella cartella App_Start. Se aggiungi unità per MVC come pacchetto nuget, penso che dovrebbe creare una classe chiamata UnityMvcActivator in quella cartella.

0

Ho avuto un problema simile. Ho risolto questo rimuovendo dal UnityConfig.cs seguente:

DynamicModuleUtility.RegisterModule(typeof(UnityPerRequestHttpModule)); 

e addizionando questo Unity.Mvc.Activator.cs

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

Ho avuto lo stesso problema. Il mio problema era questo:

Nel metodo GlobalAsax.Application_Start() che avevo scritto.

UnityMvcActivator.Start(); 

Quando l'ho rimosso, tutto ha funzionato. Quando si utilizza la classe UnityMvcActivator, il metodo Start è già chiamato attraverso l'annotazione:

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

Quindi non c'è bisogno di chiamare i metodi UnityMvcActivator nel Global.asax presentare di nuovo.