У меня есть класс репозитория, который наследуется от универсальной реализации:
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 я могу сделать это. GetType () и получить тип реализации репозитория (например, PersonRepository). Однако я не могу позвонить UseOverridesFromAssemblyOf()
, передавая тип.
Есть ли другой способ настройки переопределений в FluentNHibernate? Если нет, то как я мог бы вызвать UseOverridesFromAssemblyOf<T>
без зависимости общего хранилища от реализации хранилища или класса переопределения сопоставления?
(Источник: http://wiki.fluentnhibernate.org/Auto_mapping#Overrides)