public override void ProcessModel(IKernel kernel, ComponentModel model) { if (_transactionalInfoStore == null) { _transactionalInfoStore = kernel.Resolve<ITransactionalInfoStore>(); } var transactionalInfo = _transactionalInfoStore.GetTransactionalInfo(model.Implementation); if (transactionalInfo.TransactionalMethods.Length == 0) { return; } if (model.Implementation.IsSealed) { var sb = new StringBuilder(); sb.AppendFormat("The class {0} uses [NHTransaction] attributes, but it is sealed", model.Implementation); throw new NHibernateFacilityException(sb.ToString()); } var problemMethods = (from m in transactionalInfo.TransactionalMethods where !m.IsVirtual select m).ToArray(); if (problemMethods.Length > 0) { var sb = new StringBuilder(); sb.AppendFormat( "The class {0} uses [NHTransaction] attributes, but the following methods need to be declared virtual:", model.Implementation); sb.AppendLine(); foreach (var m in problemMethods) { sb.Append(" "); sb.Append(m.Name); } throw new NHibernateFacilityException(sb.ToString()); } model.Dependencies.Add(new DependencyModel(null, typeof (NHTransactionInterceptor), false)); model.Interceptors.Add(new InterceptorReference(typeof (NHTransactionInterceptor))); }
public NHTransactionInterceptor(IKernel kernel, ITransactionalInfoStore transactionalInfoStore) { _kernel = Verify.ArgumentNotNull(kernel, "kernel"); _transactionalInfoStore = Verify.ArgumentNotNull(transactionalInfoStore, "transactionalInfoStore"); }