如果由于某种原因未找到数据库,则在尝试从Structuremap中获取NHibernate session 的实例时,是否仍可以在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。我在网络配置中有一个自定义静态html错误页面设置,但即使我将自定义错误模式设置为“开”,它也不会显示

最佳答案

捕获所有NHibernate/StructureMap初始化错误,并在无法创建依赖于StructureMap相关依赖项的 Controller 时覆盖 Controller 工厂以处理这种情况。这将允许您处理错误并重定向到既不依赖NHibernate也不依赖于StructureMap的操作/ Controller -从 Controller 工厂或使用[HandleError]属性。

关于asp.net-mvc - 使用Structuremap进行异常处理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1751547/

10-13 02:58