Обработка исключений с помощью Structuremap - PullRequest
0 голосов
/ 17 ноября 2009

Есть ли способ изящно восстановиться в приложении ASP.NET MVC, если база данных по какой-то причине не найдена, когда я пытаюсь получить экземпляр сеанса NHibernate из 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());

             });
    }
}

Прямо сейчас приложение отобразит ошибку времени выполнения YSOD. У меня есть настраиваемая статическая страница ошибки html в веб-конфигурации, но она не отображается, даже если для режима настраиваемых ошибок установлено значение «Вкл.»

1 Ответ

0 голосов
/ 18 ноября 2009

Перехватывайте любые ошибки инициализации NHibernate / StructureMap и переопределяйте фабрику вашего контроллера для обработки случая, когда невозможно создать контроллер, который зависит от зависимостей, связанных со StructureMap. Это позволит вам обрабатывать ошибки и перенаправлять к действию / контроллеру, который не зависит ни от NHibernate, ни от StructureMap - ни от фабрики контроллеров, ни с помощью атрибута [HandleError].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...