2010-04-02 31 views
2

我有一個庫類,它從通用實現繼承:FluentNHibernate覆蓋:UseOverridesFromAssemblyOf非通用版本

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

通用庫實現使用功能NHibernate約定。他們工作正常。其中一個慣例是所有財產都不可空。

現在我需要定義特定的屬性可以在約定之外爲空。功能NHibernate有一個有趣的替代機制:

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

現在我需要的覆蓋類註冊到功能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

回答