예제 #1
0
        public static Configuration UseRepositories(this Configuration configuration, string connectionSection, params Assembly[] assemblies)
        {
            configuration.RegisterRepositoriesAssembly(assemblies);
            string connectionString           = System.Configuration.ConfigurationManager.ConnectionStrings[connectionSection].ConnectionString;
            string providerName               = System.Configuration.ConfigurationManager.ConnectionStrings[connectionSection].ProviderName;
            IPersistenceConfigurer configurer = null;

            switch (providerName)
            {
            case "System.Data.SqlClient":
                configurer = MsSqlConfiguration.MsSql2008.ConnectionString(connectionString)
                             .AdoNetBatchSize(500)
                             .Dialect <NHibernate.Dialect.MsSql2008Dialect>()
                             .FormatSql()
                             .ShowSql()
                             .UseOuterJoin();
                break;

            case "MySql.Data.MySqlClient":
                configurer = MySQLConfiguration.Standard.ConnectionString(connectionString)
                             .AdoNetBatchSize(500)
                             .Dialect <NHibernate.Dialect.MySQL55InnoDBDialect>()
                             .FormatSql()
                             .ShowSql()
                             .UseOuterJoin();
                break;
            }

            NhSessionFactory.Instance(configurer, configuration.repositoryAssemblies.ToArray());
            Engine.RegisterDataBase(providerName, connectionString);


            foreach (Assembly assembly in configuration.repositoryAssemblies)
            {
                Type[] types = assembly.GetTypes().Where(item => typeof(IRepository).IsAssignableFrom(item) && !item.IsAbstract).ToArray();
                ((AutofacObjectContainer)ObjectContainer.Current).ContainerBuilder.RegisterTypes(types).AsImplementedInterfaces().SingleInstance();
            }
            return(configuration);
        }