如果在我尝试从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”,它也不会显示
答案 0 :(得分:0)
捕获任何NHibernate / StructureMap初始化错误,并覆盖您的控制器工厂以处理无法创建依赖于StructureMap相关依赖项的控制器的情况。这将允许您处理错误并重定向到不依赖于NHibernate和StructureMap的操作/控制器 - 来自控制器工厂或使用[HandleError]属性。