Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Global.asax.cs
- protected void Application_Start()
- {
- var builder = new ContainerBuilder();
- builder.RegisterModule(new AutofacControllerModule(Assembly.GetExecutingAssembly()));
- builder.RegisterModule(new NHibernateModule());
- builder.RegisterModule(new AutoMapperModule());
- _ContainerProvider = new ContainerProvider(builder.Build());
- ControllerBuilder.Current.SetControllerFactory(new AutofacControllerFactory(_ContainerProvider));
- RegisterRoutes(RouteTable.Routes);
- }
- ## NHibernateModule.cs
- public class NHibernateModule : Module
- {
- protected override void Load(ContainerBuilder builder)
- {
- if (builder == null)
- throw new System.ArgumentNullException("builder", "builder is null.");
- // NHProf utility
- NHibernateProfiler.Initialize();
- // Re-usable instances
- builder.RegisterType<MyServiceImpl>().As<IMyService>().InstancePerMatchingLifetimeScope(WebLifetime.Request);
- builder.Register(c => new TransactionManager()).InstancePerMatchingLifetimeScope(WebLifetime.Request);
- // Session-per-Request
- builder.Register(c => c.Resolve<ISessionFactory>().OpenSession())
- .HttpRequestScoped()
- .OnActivated(e =>
- { // can wrap transactions here, as opposed to via an action filter; I prefer the action filter.
- e.Context.Resolve<TransactionManager>().CurrentTransaction = ((ISession)e.Instance).BeginTransaction();
- });
- // Application scoped SessionFactory instance
- builder.Register(c => BuildSessionFactory()).SingleInstance();
- }
- // SessionFactory builder
- private ISessionFactory BuildSessionFactory()
- {
- var cfg = new NHibernate.Cfg.Configuration().Configure(Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "nhibernate.config"));
- cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName, ConfigurationManager.ConnectionStrings["Dubskin"].Name);
- if (Convert.ToBoolean(ConfigurationManager.AppSettings["GenerateSchema"]))
- {
- new SchemaExport(cfg).Execute(false, true, false);
- }
- return cfg.BuildSessionFactory();
- }
- }
- ## TransactionManager.cs -- would swap this out for an action filter in the future
- internal class TransactionManager : IDisposable
- {
- bool _disposed;
- public ITransaction CurrentTransaction { get; set; }
- public void Dispose()
- {
- if (!_disposed)
- {
- _disposed = true;
- if (CurrentTransaction != null)
- {
- if (HttpContext.Current.Error != null)
- CurrentTransaction.Rollback();
- else
- CurrentTransaction.Commit();
- }
- }
- }
- }
- ## AutoMapperModule.cs -- used for configuring automapped models -> view models on app start.
- public class AutoMapperModule : Module
- {
- protected override void Load(ContainerBuilder moduleBuilder)
- {
- if (moduleBuilder == null)
- throw new ArgumentNullException("moduleBuilder", "moduleBuilder is null.");
- Mapper.CreateMap<ManageEntityViewModel, Entity>();
- }
- }
Add Comment
Please, Sign In to add comment