Skip to content

Commit 0ffa9d4

Browse files
committed
One more step for injectable ICollectionTypeFactory
SVN: trunk@4457
1 parent ec32826 commit 0ffa9d4

7 files changed

+60
-11
lines changed

src/NHibernate/Bytecode/AbstractBytecodeProvider.cs

+29
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public abstract class AbstractBytecodeProvider : IBytecodeProvider, IInjectableP
88
{
99
private readonly IObjectsFactory objectsFactory = new ActivatorObjectsFactory();
1010
protected System.Type proxyFactoryFactory;
11+
private ICollectionTypeFactory collectionTypeFactory;
1112

1213
#region IBytecodeProvider Members
1314

@@ -38,6 +39,34 @@ public virtual IObjectsFactory ObjectsFactory
3839
get { return objectsFactory; }
3940
}
4041

42+
public ICollectionTypeFactory CollectionTypeFactory
43+
{
44+
get
45+
{
46+
if (collectionTypeFactory == null)
47+
{
48+
try
49+
{
50+
collectionTypeFactory =
51+
(ICollectionTypeFactory) ObjectsFactory.CreateInstance(typeof (Type.DefaultCollectionTypeFactory));
52+
}
53+
catch (Exception e)
54+
{
55+
throw new HibernateByteCodeException("Failed to create an instance of CollectionTypeFactory!", e);
56+
}
57+
}
58+
return collectionTypeFactory;
59+
}
60+
protected set
61+
{
62+
if(value == null)
63+
{
64+
throw new InvalidOperationException("The CollectionTypeFactory can't be null.");
65+
}
66+
collectionTypeFactory = value;
67+
}
68+
}
69+
4170
#endregion
4271

4372
#region IInjectableProxyFactoryFactory Members

src/NHibernate/Bytecode/IBytecodeProvider.cs

+11
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,19 @@ public interface IBytecodeProvider
2020
/// <returns>The reflection optimization delegate.</returns>
2121
IReflectionOptimizer GetReflectionOptimizer(System.Type clazz, IGetter[] getters, ISetter[] setters);
2222

23+
/// <summary>
24+
/// NHibernate's object instaciator.
25+
/// </summary>
26+
/// <remarks>
27+
/// For entities <see cref="IReflectionOptimizer"/> and its implementations.
28+
/// </remarks>
2329
IObjectsFactory ObjectsFactory { get; }
2430

31+
/// <summary>
32+
/// Instanciator of NHibernate's collections default types.
33+
/// </summary>
34+
ICollectionTypeFactory CollectionTypeFactory { get; }
35+
2536
// <summary> Generate a ClassTransformer capable of performing bytecode manipulation. </summary>
2637
// <param name="classFilter">
2738
// filter used to limit which classes are to be instrumented via this ClassTransformer.

src/NHibernate/Type/ICollectionTypeFactory.cs src/NHibernate/Bytecode/ICollectionTypeFactory.cs

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System.Collections;
22
using System.Collections.Generic;
3-
namespace NHibernate.Type
3+
using NHibernate.Type;
4+
5+
namespace NHibernate.Bytecode
46
{
57
/// <summary>
68
/// Type factory for collections types.

src/NHibernate/Bytecode/IObjectsFactory.cs

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
namespace NHibernate.Bytecode
22
{
3+
/// <summary>
4+
/// Interface for instanciate all NHibernate objects.
5+
/// </summary>
36
public interface IObjectsFactory
47
{
58
/// <summary>

src/NHibernate/NHibernate.csproj

+2-2
Original file line numberDiff line numberDiff line change
@@ -603,8 +603,8 @@
603603
<Compile Include="Tool\hbm2ddl\SchemaMetadataUpdater.cs" />
604604
<Compile Include="Transaction\AdoNetWithDistrubtedTransactionFactory.cs" />
605605
<Compile Include="Transform\ToListResultTransformer.cs" />
606-
<Compile Include="Type\CollectionTypeFactory.cs" />
607-
<Compile Include="Type\ICollectionTypeFactory.cs" />
606+
<Compile Include="Type\DefaultCollectionTypeFactory.cs" />
607+
<Compile Include="Bytecode\ICollectionTypeFactory.cs" />
608608
<Compile Include="Util\NullableDictionary.cs" />
609609
<Compile Include="Hql\Ast\ANTLR\Util\PathHelper.cs" />
610610
<Compile Include="Hql\Ast\ANTLR\Util\SyntheticAndFactory.cs" />

src/NHibernate/Type/CollectionTypeFactory.cs src/NHibernate/Type/DefaultCollectionTypeFactory.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
using System.Collections;
22
using System.Collections.Generic;
3+
using NHibernate.Bytecode;
34

45
namespace NHibernate.Type
56
{
6-
public class CollectionTypeFactory : ICollectionTypeFactory
7+
public class DefaultCollectionTypeFactory : ICollectionTypeFactory
78
{
89
public virtual CollectionType Array(string role, string propertyRef, bool embedded, System.Type elementClass)
910
{

src/NHibernate/Type/TypeFactory.cs

+10-7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Collections.Generic;
44
using System.Globalization;
55
using System.Reflection;
6+
using NHibernate.Bytecode;
67
using NHibernate.Classic;
78
using NHibernate.Engine;
89
using NHibernate.Intercept;
@@ -95,10 +96,7 @@ private static void RegisterType(System.Type systemType, IType nhibernateType, s
9596
/// <summary></summary>
9697
static TypeFactory()
9798
{
98-
Instance =
99-
new TypeFactory(
100-
(ICollectionTypeFactory)
101-
Cfg.Environment.BytecodeProvider.ObjectsFactory.CreateInstance(typeof (CollectionTypeFactory)));
99+
Instance = new TypeFactory();
102100

103101
//basicTypes.Add(NHibernate.Blob.Name, NHibernate.Blob);
104102
//basicTypes.Add(NHibernate.Clob.Name, NHibernate.Clob);
@@ -184,11 +182,16 @@ NH will choose "datetime" when no type is specified in the mapping*/
184182
getTypeDelegatesWithPrecision.Add(NHibernateUtil.Decimal.Name, GetDecimalType);
185183
}
186184

187-
public ICollectionTypeFactory CollectionTypeFactory { get; private set; }
185+
public ICollectionTypeFactory CollectionTypeFactory
186+
{
187+
get
188+
{
189+
return Cfg.Environment.BytecodeProvider.CollectionTypeFactory;
190+
}
191+
}
188192

189-
private TypeFactory(ICollectionTypeFactory collectionTypeFactory)
193+
private TypeFactory()
190194
{
191-
CollectionTypeFactory = collectionTypeFactory;
192195
}
193196

194197
/// <summary>

0 commit comments

Comments
 (0)