使用Structuremap进行异常处理

时间:2009-11-17 20:28:55

标签: asp.net-mvc error-handling structuremap

如果在我尝试从Structuremap获取NHibernate会话的实例时由于某种原因找不到数据库,是否仍然可以在ASP.NET MVC应用程序中优雅地恢复?

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());

             });
    }
}

现在,应用程序将显示运行时错误YSOD。我在Web配置中设置了自定义静态html错误页面,但即使我将自定义错误模式设置为“On”,它也不会显示

1 个答案:

答案 0 :(得分:0)

捕获任何NHibernate / StructureMap初始化错误,并覆盖您的控制器工厂以处理无法创建依赖于StructureMap相关依赖项的控制器的情况。这将允许您处理错误并重定向到不依赖于NHibernate和StructureMap的操作/控制器 - 来自控制器工厂或使用[HandleError]属性。