Example #1
0
        public override void Install(IDictionary stateSaver)
        {
            var neCfg = new DefaultDatabaseConfiguration();

            CreateDatabase(neCfg.Server, neCfg.Database, neCfg.Username, neCfg.Password);

            var nhibernateCfg = neCfg.DatabaseConfiguration;

            Rhino.Security.Security.Configure <User>(nhibernateCfg, SecurityTableStructure.Prefix, u => new SecurityInfo(u.DisplayName, u.Id));

            var container = new WindsorContainer()
                            .AddFacility <RhinoSecurityFacility>()
                            .Register(
                Component.For(typeof(IEntityInformationExtractor <>)).ImplementedBy(typeof(EntityInformationExtractor <>)).LifeStyle.Transient,
                Component.For <UserController>(),
                Component.For <IClock>().ImplementedBy <SystemClock>(),
                Component.For <NhUserSecurityInterceptor>());

            ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));

            new SchemaExport(nhibernateCfg).Execute(false, true, false);

            using (var factory = nhibernateCfg.BuildSessionFactory())
                using (var scope = new SessionScope(factory))
                {
                    container.Register(Component.For <ISession>().Instance(scope.Session));
                    authz       = container.Resolve <IAuthorizationRepository>();
                    pbs         = container.Resolve <IPermissionsBuilderService>();
                    session     = container.Resolve <ISession>();
                    interceptor = container.Resolve <NhUserSecurityInterceptor>();

                    SaveSecurityObjects();
                    SaveAdminAndAnonymous();

                    SaveLanguages();
                }
        }
		/// <summary>
		/// Builds an <see cref="InPlaceConfigurationSource"/> for the specified database.
		/// </summary>
		/// <param name="database">The database type.</param>
		/// <param name="connectionString">The connection string.</param>
		/// <returns></returns>
		public static InPlaceConfigurationSource Build(DatabaseType database, string connectionString)
		{
			if (string.IsNullOrEmpty(connectionString)) throw new ArgumentNullException("connectionString");

			var config = new InPlaceConfigurationSource();

			var parameters = new DefaultDatabaseConfiguration().For(database);
			parameters["connection.connection_string"] = connectionString;
			config.Add(typeof(ActiveRecordBase), parameters);

			return config;
		}
		/// <summary>
		/// Sets the default configuration for database specifiend by <paramref name="name"/>.
		/// </summary>
		/// <param name="name">Name of the database type.</param>
		/// <param name="connectionStringName">name of the connection string specified in connectionStrings configuration section</param>
		/// <returns></returns>
		protected IDictionary<string, string> SetDefaults(string name, string connectionStringName)
		{
			var names = Enum.GetNames(typeof(DatabaseType));
			if (!Array.Exists(names, n => n.Equals(name, StringComparison.OrdinalIgnoreCase)))
			{
				var builder = new StringBuilder();
				builder.AppendFormat("Specified value ({0}) is not valid for 'database' attribute. Valid values are:", name);
				foreach (var value in Enum.GetValues(typeof(DatabaseType)))
				{
					builder.AppendFormat(" '{0}'", value.ToString());
				}

				builder.Append(".");
				throw new ConfigurationErrorsException(builder.ToString());
			}

			var type = (DatabaseType)Enum.Parse(typeof(DatabaseType), name, true);
			var defaults = new DefaultDatabaseConfiguration().For(type);
			defaults["connection.connection_string_name"] = connectionStringName;
			return defaults;
		}