Example #1
0
        protected virtual CustomAutoPersistenceModel GetPersistenceModel(Container container, Configuration config)
        {
            var persistenceModel = new CustomAutoPersistenceModel(
                container,
                GetAutomappingConfiguration(),
                container.GetInstance <IEventPublisher>(),
                config);

            persistenceModel.AddTypeSource(new CombinedAssemblyTypeSource(GetEntityAssemblies()));
            persistenceModel
            .Conventions.AddFromAssemblyOf <NotNullConvention>()
            .UseOverridesFromAssemblies(GetAutoMappingOverrideAssemblies());

            return(persistenceModel);
        }
        /// <summary>
        /// Alter the model
        /// </summary>
        /// <remarks>
        /// Finds all types in the assembly (passed in the constructor) that implement IAutoMappingOverride&lt;T&gt;, then
        /// creates an AutoMapping&lt;T&gt; and applies the override to it.
        /// </remarks>
        /// <param name="model">AutoPersistenceModel instance to alter</param>
        public void Alter(CustomAutoPersistenceModel model)
        {
            // find all types deriving from IAutoMappingOverride<T>
            var types = from type in assembly.GetExportedTypes()
                        where !type.IsAbstract
                        let entity = (from interfaceType in type.GetInterfaces()
                                      where interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IAutoMappingOverride <>)
                                      select interfaceType.GetGenericArguments()[0]).FirstOrDefault()
                                     where entity != null
                                     select type;

            foreach (var type in types)
            {
                model.Override(type);
            }
        }