我正在寻找在使用 NHibernate Burrow 管理 NH 会话的经典 ASP.net 应用程序上配置 NHibernate Validator 的最佳方法。
如何让它自动注册拦截器?
问问题
570 次
1 回答
2
好的,这就是我最终要做的。
首先,我在 global.asax Application_Start 事件中设置了 SharedEngineProvider。
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;
}
由于 Burrow 拦截了启动 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();
于 2009-09-11T15:04:47.363 回答