Переопределения FluentNHibernate: UseOverridesFromAssemblyOf неуниверсальная версия

У меня есть класс репозитория, который наследуется от общей реализации:

public namespace RepositoryImplementation {
    public class PersonRepository : Web.Generics.GenericNHibernateRepository<Person>
}

Универсальная реализация репозитория использует соглашения Fluent NHibernate. Они работают нормально. Одним из таких соглашений является то, что все свойства не могут принимать значения NULL.

Теперь мне нужно определить, что определенные свойства могут быть обнулены за пределами соглашений. Fluent NHibernate имеет интересный механизм переопределения:

public namespace RepositoryImplementation {
    public class PersonMappingOverride : IAutoMappingOverride<Person> {
        public void Override(FluentNHibernate.Automapping.AutoMapping<Funcionario> mapping)
        {
            mapping.Map(x => x.PhoneNumber).Nullable();
        }
    }
}

Теперь мне нужно зарегистрировать класс переопределения в Fluent NHibernate. У меня есть следующий код в универсальном классе Web.Generics.GenericNHibernateRepository:

AutoMap.AssemblyOf<Person>()
  .Where(type => type.Namespace == "Entities")
  .UseOverridesFromAssemblyOf<PersonMappingOverride>();

Проблема в том, что UseOverridesFromAssemblyOf - это общий метод, и я не могу сделать что-то подобное:

.UseOverridesFromAssemblyOf<PersonMappingOverride>();

Потому что это приведет к циклической ссылке. Я не хочу, чтобы общий репозиторий знал либо репозиторий, либо класс переопределения сопоставления, потому что они различаются от проекта к проекту.

Я вижу другое решение: в классе GenericNHibernateRepository я могу сделать this.GetType() и получить тип реализации репозитория (например, PersonRepository). Однако я не могу вызвать UseOverridesFromAssemblyOf(), передавая тип.

Есть ли другой способ настроить переопределения в FluentNHibernate? Если нет, то как я могу вызвать UseOverridesFromAssemblyOf<T>, не ставя общий репозиторий в зависимость от реализации репозитория или класса переопределения сопоставления?

(Источник: http://wiki.fluentnhibernate.org/Auto_mapping#Overrides)


person ThiagoAlves    schedule 02.04.2010    source источник


Ответы (1)


Вот как я это делаю (источник на http://github.com/ToJans/MVCExtensions/blob/master/src/MvcExtensions/Services/Impl/FluentNHibernate/Database.cs )

    am1.GetType()
   .GetMethod("UseOverridesFromAssemblyOf")
   .MakeGenericMethod(mappings.GetType())
   .Invoke(am1,null);
person Tom    schedule 13.04.2010