diff --git a/src/Spring/Spring.Data.NHibernate20/Data/NHibernate/LocalSessionFactoryObject.cs b/src/Spring/Spring.Data.NHibernate20/Data/NHibernate/LocalSessionFactoryObject.cs
index b59dc3d8..60124971 100644
--- a/src/Spring/Spring.Data.NHibernate20/Data/NHibernate/LocalSessionFactoryObject.cs
+++ b/src/Spring/Spring.Data.NHibernate20/Data/NHibernate/LocalSessionFactoryObject.cs
@@ -28,6 +28,7 @@ using System.Data.Common;
using Common.Logging;
using NHibernate;
+using NHibernate.Bytecode;
using NHibernate.Cfg;
using NHibernate.Connection;
using NHibernate.Dialect;
@@ -114,10 +115,15 @@ namespace Spring.Data.NHibernate
private IResourceLoader resourceLoader;
+ private IApplicationContext applicationContext;
+
// Configuration time DB provider.
// This will not be available after configuration has been done.
private static IDbProvider configTimeDbProvider;
+#if NH_2_1
+ private IBytecodeProvider bytecodeProvider;
+#endif
#endregion
#region Constants
@@ -146,12 +152,9 @@ namespace Spring.Data.NHibernate
///
/// Setting the Application Context determines were resources are loaded from
///
- IApplicationContext IApplicationContextAware.ApplicationContext
+ public IApplicationContext ApplicationContext
{
- set
- {
- this.ResourceLoader = value;
- }
+ set { this.applicationContext = value; }
}
///
@@ -416,6 +419,19 @@ namespace Spring.Data.NHibernate
}
}
+#if NH_2_1
+ ///
+ /// Sets custom byte code provider implementation to be used. This corresponds to setting
+ /// the property before NHibernate session factory
+ /// configuration.
+ ///
+ public virtual IBytecodeProvider BytecodeProvider
+ {
+ get { return this.bytecodeProvider; }
+ set { this.bytecodeProvider = value; }
+ }
+#endif
+
#endregion
@@ -572,9 +588,14 @@ namespace Spring.Data.NHibernate
if (this.mappingResources != null)
{
+ IResourceLoader loader = this.ResourceLoader;
+ if (loader == null)
+ {
+ loader = this.applicationContext;
+ }
foreach (string resourceName in mappingResources)
{
- config.AddInputStream(this.ResourceLoader.GetResource(resourceName).InputStream);
+ config.AddInputStream(loader.GetResource(resourceName).InputStream);
}
}
@@ -662,11 +683,22 @@ namespace Spring.Data.NHibernate
}
}
-#if NH_2_1
-#endif
// Perform custom post-processing in subclasses.
PostProcessConfiguration(config);
+#if NH_2_1
+ if (BytecodeProvider != null)
+ {
+ // set custom IBytecodeProvider
+ Environment.BytecodeProvider = BytecodeProvider;
+ }
+ else
+ {
+ // use Spring's as default
+ // Environment.BytecodeProvider = new Bytecode.BytecodeProvider(this.applicationContext);
+ }
+#endif
+
// Build SessionFactory instance.
log.Info("Building new Hibernate SessionFactory");
this.configuration = config;
diff --git a/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/LocalSessionFactoryObjectTests.cs b/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/LocalSessionFactoryObjectTests.cs
index db829837..39bbf96f 100644
--- a/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/LocalSessionFactoryObjectTests.cs
+++ b/test/Spring/Spring.Data.NHibernate.Tests/Data/NHibernate/LocalSessionFactoryObjectTests.cs
@@ -26,11 +26,13 @@ using NHibernate.Connection;
using NHibernate.Dialect;
using NHibernate.Driver;
+using Spring.Context.Support;
using Spring.Data.Common;
using NUnit.Framework;
#if NH_2_1
using Spring.Data.NHibernate.Bytecode;
+
#endif
namespace Spring.Data.NHibernate
@@ -50,6 +52,8 @@ namespace Spring.Data.NHibernate
dbProvider.ConnectionString = "Data Source=(local);Database=Spring;Trusted_Connection=false";
LocalSessionFactoryObject sfo = new LocalSessionFactoryObject();
sfo.DbProvider = dbProvider;
+ sfo.ApplicationContext = new StaticApplicationContext();
+
IDictionary properties = new Hashtable();
properties.Add(Environment.Dialect, typeof(MsSql2000Dialect).AssemblyQualifiedName);
properties.Add(Environment.ConnectionDriver, typeof(SqlClientDriver).AssemblyQualifiedName);
@@ -70,6 +74,8 @@ namespace Spring.Data.NHibernate
#if NH_2_1
Assert.AreEqual(sfo.Configuration.Properties[Environment.ProxyFactoryFactoryClass], typeof(ProxyFactoryFactory).AssemblyQualifiedName);
+ // Spring's IBytecodeProvider should be the default
+ // Assert.AreEqual(typeof(BytecodeProvider), Environment.BytecodeProvider.GetType(), "default IBytecodeProvider was not Spring's BytecodeProvider");
#endif
}
diff --git a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Spring.Data.NHibernate21.Integration.Tests.2008.csproj b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Spring.Data.NHibernate21.Integration.Tests.2008.csproj
index 2be65e45..ac9c1a33 100644
--- a/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Spring.Data.NHibernate21.Integration.Tests.2008.csproj
+++ b/test/Spring/Spring.Data.NHibernate21.Integration.Tests/Spring.Data.NHibernate21.Integration.Tests.2008.csproj
@@ -44,10 +44,6 @@
False
..\..\..\lib\NHibernate21\net\2.0\Iesi.Collections.dll
-
- False
- ..\..\..\lib\NHibernate21\net\2.0\LinFu.DynamicProxy.dll
-
False
..\..\..\lib\NHibernate21\net\2.0\log4net.dll