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<T>, then /// creates an AutoMapping<T> 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); } }