diff --git a/global.json b/global.json index 2982b88a6..404490b8e 100644 --- a/global.json +++ b/global.json @@ -1,6 +1,6 @@ { "projects": [ "src" ], "sdk": { - "version": "2.1.700" + "version": "2.1.812" } } \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/AutoMapping/Overrides/InternalAutoMappingOverrideAlterationTests.cs b/src/FluentNHibernate.Testing/AutoMapping/Overrides/InternalAutoMappingOverrideAlterationTests.cs new file mode 100644 index 000000000..0acad2658 --- /dev/null +++ b/src/FluentNHibernate.Testing/AutoMapping/Overrides/InternalAutoMappingOverrideAlterationTests.cs @@ -0,0 +1,67 @@ +using FluentNHibernate.Automapping; +using FluentNHibernate.Automapping.Alterations; +using FluentNHibernate.Automapping.TestFixtures; +using FluentNHibernate.Testing.Automapping; +using FluentNHibernate.Testing.Fixtures.AutoMappingAlterations.Model; +using NUnit.Framework; + +namespace FluentNHibernate.Testing.AutoMapping.Overrides +{ + [TestFixture] + public class InternalAutoMappingOverrideAlterationTests + { + private AutoMappingOverrideAlteration alteration; + + [SetUp] + public void CreateOverride() + { + alteration = new AutoMappingOverrideAlteration(typeof(ExampleClass).Assembly, true); + } + + [Test] + public void OverridesApplied() + { + var model = AutoMap.AssemblyOf() + .Where(t => t.Namespace == typeof(Baz).Namespace) + .Alterations(x => x.Add(alteration)); + + new AutoMappingTester(model) + .Element("class").HasAttribute("batch-size", "10"); + } + + [Test] + public void InternalOverridesApplied() + { + var model = AutoMap.AssemblyOf() + .Where(t => t.Namespace == typeof(Baz).Namespace) + .Alterations(x => x.Add(alteration)); + + new AutoMappingTester(model) + .Element("class").HasAttribute("table", "InternalBaz"); + } + + [Test] + public void RegularAutoMappingsStillWorkWhenOverridesApplied() + { + var model = AutoMap.AssemblyOf() + .Where(t => t.Namespace == typeof(Baz).Namespace); + + alteration.Alter(model); + + new AutoMappingTester(model) + .Element("class/property[@name='Name']").Exists(); + } + + [Test] + public void OverridesCanBeAbstract() + { + var model = AutoMap.AssemblyOf() + .Where(t => t.Namespace == typeof(Qux).Namespace); + + alteration.Alter(model); + + new AutoMappingTester(model) + .Element("class").HasAttribute("batch-size", "10"); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/AutoMapping/Overrides/AutoMappingOverrideAlterationTests.cs b/src/FluentNHibernate.Testing/AutoMapping/Overrides/PublicAutoMappingOverrideAlterationTests.cs similarity index 77% rename from src/FluentNHibernate.Testing/AutoMapping/Overrides/AutoMappingOverrideAlterationTests.cs rename to src/FluentNHibernate.Testing/AutoMapping/Overrides/PublicAutoMappingOverrideAlterationTests.cs index a25303ab6..5167ec260 100644 --- a/src/FluentNHibernate.Testing/AutoMapping/Overrides/AutoMappingOverrideAlterationTests.cs +++ b/src/FluentNHibernate.Testing/AutoMapping/Overrides/PublicAutoMappingOverrideAlterationTests.cs @@ -1,56 +1,67 @@ -using FluentNHibernate.Automapping; -using FluentNHibernate.Automapping.Alterations; -using FluentNHibernate.Automapping.TestFixtures; -using FluentNHibernate.Testing.Automapping; -using FluentNHibernate.Testing.Fixtures.AutoMappingAlterations.Model; -using NUnit.Framework; - -namespace FluentNHibernate.Testing.AutoMapping.Overrides -{ - [TestFixture] - public class AutoMappingOverrideAlterationTests - { - private AutoMappingOverrideAlteration alteration; - - [SetUp] - public void CreateOverride() - { - alteration = new AutoMappingOverrideAlteration(typeof(ExampleClass).Assembly); - } - - [Test] - public void OverridesApplied() - { - var model = AutoMap.AssemblyOf() - .Where(t => t.Namespace == typeof(Baz).Namespace) - .Alterations(x => x.Add(alteration)); - - new AutoMappingTester(model) - .Element("class").HasAttribute("batch-size", "10"); - } - - [Test] - public void RegularAutoMappingsStillWorkWhenOverridesApplied() - { - var model = AutoMap.AssemblyOf() - .Where(t => t.Namespace == typeof(Baz).Namespace); - - alteration.Alter(model); - - new AutoMappingTester(model) - .Element("class/property[@name='Name']").Exists(); - } - - [Test] - public void OverridesCanBeAbstract() - { - var model = AutoMap.AssemblyOf() - .Where(t => t.Namespace == typeof(Qux).Namespace); - - alteration.Alter(model); - - new AutoMappingTester(model) - .Element("class").HasAttribute("batch-size", "10"); - } - } +using FluentNHibernate.Automapping; +using FluentNHibernate.Automapping.Alterations; +using FluentNHibernate.Automapping.TestFixtures; +using FluentNHibernate.Testing.Automapping; +using FluentNHibernate.Testing.Fixtures.AutoMappingAlterations.Model; +using NUnit.Framework; + +namespace FluentNHibernate.Testing.AutoMapping.Overrides +{ + [TestFixture] + public class PublicAutoMappingOverrideAlterationTests + { + private AutoMappingOverrideAlteration alteration; + + [SetUp] + public void CreateOverride() + { + alteration = new AutoMappingOverrideAlteration(typeof(ExampleClass).Assembly, false); + } + + [Test] + public void OverridesApplied() + { + var model = AutoMap.AssemblyOf() + .Where(t => t.Namespace == typeof(Baz).Namespace) + .Alterations(x => x.Add(alteration)); + + new AutoMappingTester(model) + .Element("class").HasAttribute("batch-size", "10"); + } + + [Test] + public void InternalOverridesNotApplied() + { + var model = AutoMap.AssemblyOf() + .Where(t => t.Namespace == typeof(Baz).Namespace) + .Alterations(x => x.Add(alteration)); + + new AutoMappingTester(model) + .Element("class").HasAttribute("table", "`Baz`"); + } + + [Test] + public void RegularAutoMappingsStillWorkWhenOverridesApplied() + { + var model = AutoMap.AssemblyOf() + .Where(t => t.Namespace == typeof(Baz).Namespace); + + alteration.Alter(model); + + new AutoMappingTester(model) + .Element("class/property[@name='Name']").Exists(); + } + + [Test] + public void OverridesCanBeAbstract() + { + var model = AutoMap.AssemblyOf() + .Where(t => t.Namespace == typeof(Qux).Namespace); + + alteration.Alter(model); + + new AutoMappingTester(model) + .Element("class").HasAttribute("batch-size", "10"); + } + } } \ No newline at end of file diff --git a/src/FluentNHibernate.Testing/Fixtures/AutoMappingAlterations/InternalOverride.cs b/src/FluentNHibernate.Testing/Fixtures/AutoMappingAlterations/InternalOverride.cs new file mode 100644 index 000000000..b9b418d12 --- /dev/null +++ b/src/FluentNHibernate.Testing/Fixtures/AutoMappingAlterations/InternalOverride.cs @@ -0,0 +1,14 @@ +using FluentNHibernate.Automapping; +using FluentNHibernate.Automapping.Alterations; +using FluentNHibernate.Testing.Fixtures.AutoMappingAlterations.Model; + +namespace FluentNHibernate.Testing.Fixtures.AutoMappingAlterations +{ + internal class InternalOverride : IAutoMappingOverride + { + public void Override(AutoMapping mapping) + { + mapping.Table("InternalBaz"); + } + } +} \ No newline at end of file diff --git a/src/FluentNHibernate/Automapping/Alterations/AutoMappingOverrideAlteration.cs b/src/FluentNHibernate/Automapping/Alterations/AutoMappingOverrideAlteration.cs index ed783489d..68f2ced65 100644 --- a/src/FluentNHibernate/Automapping/Alterations/AutoMappingOverrideAlteration.cs +++ b/src/FluentNHibernate/Automapping/Alterations/AutoMappingOverrideAlteration.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; using System.Linq; using System.Reflection; -using FluentNHibernate.Utils; namespace FluentNHibernate.Automapping.Alterations { @@ -12,14 +9,17 @@ namespace FluentNHibernate.Automapping.Alterations public class AutoMappingOverrideAlteration : IAutoMappingAlteration { private readonly Assembly assembly; + private readonly bool includeInternal; /// /// Constructor for AutoMappingOverrideAlteration. /// /// Assembly to load overrides from. - public AutoMappingOverrideAlteration(Assembly overrideAssembly) + /// Should internal IAutoMappingOverrides be included. + public AutoMappingOverrideAlteration(Assembly overrideAssembly, bool includeInternal) { assembly = overrideAssembly; + this.includeInternal = includeInternal; } /// @@ -32,8 +32,9 @@ public AutoMappingOverrideAlteration(Assembly overrideAssembly) /// AutoPersistenceModel instance to alter public void Alter(AutoPersistenceModel model) { + var assemblyTypes = includeInternal ? assembly.GetTypes() : assembly.GetExportedTypes(); // find all types deriving from IAutoMappingOverride - var types = from type in assembly.GetExportedTypes() + var types = from type in assemblyTypes where !type.IsAbstract let entity = (from interfaceType in type.GetInterfaces() where interfaceType.IsGenericType && interfaceType.GetGenericTypeDefinition() == typeof(IAutoMappingOverride<>) diff --git a/src/FluentNHibernate/Automapping/AutoPersistenceModel.cs b/src/FluentNHibernate/Automapping/AutoPersistenceModel.cs index 98cf0d095..8eab1f0fe 100644 --- a/src/FluentNHibernate/Automapping/AutoPersistenceModel.cs +++ b/src/FluentNHibernate/Automapping/AutoPersistenceModel.cs @@ -78,19 +78,20 @@ public AutoPersistenceModel Alterations(Action /// /// Type to get assembly from /// AutoPersistenceModel - public AutoPersistenceModel UseOverridesFromAssemblyOf() + public AutoPersistenceModel UseOverridesFromAssemblyOf(bool includeInternal = false) { - return UseOverridesFromAssembly(typeof(T).Assembly); + return UseOverridesFromAssembly(typeof(T).Assembly, includeInternal); } /// /// Use auto mapping overrides defined in the assembly of T. /// /// Assembly to scan + /// Should internal IAutoMappingOverrides be included. /// AutoPersistenceModel - public AutoPersistenceModel UseOverridesFromAssembly(Assembly assembly) + public AutoPersistenceModel UseOverridesFromAssembly(Assembly assembly, bool includeInternal = false) { - alterations.Add(new AutoMappingOverrideAlteration(assembly)); + alterations.Add(new AutoMappingOverrideAlteration(assembly, includeInternal)); return this; } diff --git a/src/FluentNHibernate/FluentNHibernate.csproj b/src/FluentNHibernate/FluentNHibernate.csproj index ba4590cbb..8c53ca85e 100644 --- a/src/FluentNHibernate/FluentNHibernate.csproj +++ b/src/FluentNHibernate/FluentNHibernate.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net461;netcoreapp2.0 + netstandard2.0;net461 1591 AnyCpu Library