好吧,这就是我最后做的。
首先,我在global.asax应用程序启动事件中设置了一个sharedingineprovider。
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();