ОК, вот что я в итоге сделал.
Сначала я настроил SharedEngineProvider в событии global.asax Application_Start.
protected void Application_Start(object sender, EventArgs e)
{
InitializeValidator();
}
private void InitializeValidator()
{
NHibernateSharedEngineProvider provider = new NHibernateSharedEngineProvider();
NHVConfigurationBase config = new NHVConfigurationBase();
config.Properties[Environment.ApplyToDDL] = "true";
config.Properties[Environment.AutoregisterListeners] = "true";
config.Properties[Environment.ValidatorMode] = ValidatorMode.UseAttribute.ToString();
config.Mappings.Add(new MappingConfiguration(Assembly.GetAssembly(typeof(User)).FullName, null));
provider.GetEngine().Configure(config);
Environment.SharedEngineProvider = provider;
}
Поскольку Барроу перехватывает запросы страниц для начала сеанса NH, я решил подключить событие PreInit для интеграции валидатора с текущим сеансом NH. У меня есть пользовательская базовая страница (я думаю, это хорошая практика), поэтому я добавил туда этот метод:
protected void Page_PreInit(object sender, EventArgs args)
{
Configuration cfg = new BurrowFramework().BurrowEnvironment.GetNHConfig("PersistenceUnit1");
ValidatorInitializer.Initialize(cfg);
}
Пока все работает нормально.
Чтобы получить ссылку на механизм валидатора, который я использую:
validatorEngine = Environment.SharedEngineProvider.GetEngine();