1 // Copyright 2004-2007 Castle Project - http://www.castleproject.org/
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
7 // http://www.apache.org/licenses/LICENSE-2.0
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
15 namespace Castle
.ActiveRecord
.Framework
.Internal
19 internal class NHibernateNullablesSupport
21 private const String NullableAsm
= "Nullables";
23 private const String NullableIType
= "Nullables.NHibernate.{0}Type, Nullables.NHibernate";
25 private static Type tINullableType
;
27 static NHibernateNullablesSupport()
31 tINullableType
= Type
.GetType("Nullables.INullableType, " + NullableAsm
, false);
35 //This can happen when someone is registerring to the AssemblyResolve event and doesn't handle
36 // missing assemblies correctly.
37 //For instance, MbUnit.AddIn.MbUnitTestRunner.AssemblyResolveHandler has this behavior.
38 tINullableType
= null;
42 public static bool IsNHibernateNullableType(Type type
)
44 return tINullableType
!= null && tINullableType
.IsAssignableFrom(type
);
47 public static String
GetITypeTypeNameForNHibernateNullable(Type type
)
54 bool isSupported
= type
.Assembly
.GetName().Name
== NullableAsm
;
58 throw new ActiveRecordException(String
.Format("ActiveRecord does not support Nullable for {0} natively.", type
));
61 return String
.Format(NullableIType
, type
.Name
);