Вы должны наследовать свое соглашение не от IUserTypeConvention, а от FluentNHibernate.Conventions.UserTypeConvention.
Например, это именно то соглашение, которое я использую, чтобы отобразить логические и обнуляемые логические значения в пользовательский тип с именем UserTrueFalseType :
/// <summary>
/// Convention: Boolean fields map to CHAR(1) T/F/Null
/// </summary>
public class BooleanTrueFalseConvention : FluentNHibernate.Conventions.UserTypeConvention<UserTrueFalseType>
{
/// <summary>
/// Accept field type criteria
/// </summary>
/// <param name="criteria"></param>
public override void Accept(FluentNHibernate.Conventions.AcceptanceCriteria.IAcceptanceCriteria<FluentNHibernate.Conventions.Inspections.IPropertyInspector> criteria)
{
criteria.Expect(instance =>
instance.Property.PropertyType.Equals(typeof(System.Boolean))
||
instance.Property.PropertyType.Equals(typeof(System.Nullable<System.Boolean>))
);
}
}
Это работает с NH 3.3 и последней версией Свободно.
Лучшая статья о компиляторах, которую я когда-либо читал, датирована 1964 годом «META II - синтаксически ориентированный язык написания компиляторов» Вал Шорре. ( http://doi.acm.org/10.1145/800257.808896 )
На 10 страницах он показывает вам, как построить поразительно простой, но очень эффективный компилятор-компилятор, обеспечивает с грамматикой компилятор-компилятор и предоставляет вам достаточно подробности для вас, чтобы реализовать его днем (с одним удивительным концептуальный момент, когда вы понимаете, как он рекурсивен), и просто для усмешки реализует АЛГОЛ-подобный язык. Бумага - это полный газ и действительно должна обязательна к прочтению для всех, кто работает с технологией компиляторов.
Вот ссылка, чтобы поиграть с отличным руководством по метакомпилированию, по материалам статьи. http://www.bayfronttechnologies.com/mc_tutorial.html