2009-11-17 5 views
0

Y a-t-il une possibilité de récupération dans une application ASP.NET MVC si la base de données n'est pas trouvée pour une raison quelconque lorsque j'essaie d'obtenir une instance de ma NHibernate Session de Structuremap?Gestion des exceptions avec Structuremap

public static class StructureMap 
{ 
    private static Configuration Cfg 
    { 
     get 
     { 
      var configuration = new Configuration().Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config")); 
      configuration.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, "MyConnectionString"); 
      return configuration; 
     } 
    } 

    public static void ConfigureStuctureMap() 
    { 
     ObjectFactory.Initialize(x => 
      { 
       x.ForRequestedType<ISessionFactory>() 
        .CacheBy(InstanceScope.Singleton) 
        .TheDefault.Is.ConstructedBy(Cfg.BuildSessionFactory); 

       x.ForRequestedType<ISession>() 
        .CacheBy(InstanceScope.HttpContext) 
        .TheDefault.Is.ConstructedBy(c => c.GetInstance<NHibernateSessionFactory>().GetCurrentSession()); 

      }); 
    } 
} 

Maintenant l'application affichera une erreur d'exécution YSOD. J'ai une page d'erreur html statique personnalisée dans la configuration web mais elle ne s'affiche pas même si le mode d'erreurs personnalisées est réglé sur "On"

Répondre

0

Attrape les erreurs d'initialisation de NHibernate/StructureMap et remplace la fabrique de contrôleurs par gérer le cas où il est impossible de créer un contrôleur qui dépend des dépendances liées à StructureMap. Cela vous permettra de gérer les erreurs et de rediriger vers l'action/le contrôleur qui ne dépend ni de NHibernate ni de StructureMap - soit à partir de la fabrique du contrôleur ou en utilisant l'attribut [HandleError].