2011-01-07 24 views
1

從版本2.1開始,NHibernate支持通過IoC容器(通過ByteCodeProvider配置設置提供)爲IUserTypes構造器注入。但是,當我試圖通過流利的NHibernate配置(而不是自動映射)來實現這個工作時,當我構建我的配置時,我得到一個異常,抱怨我的一個對象(在這個例子中是一個自定義的ICompositeUserType)並不是有一個空的默認構造函數。如何配置流利NHibernate使用IoC構造器注入(非空構造函數)的IUserType實現

我將此異常追溯到FluentNHibernate.Mapping.PropertyPart.AddColumnsFromCompositeUserType(類型compositeUserType)中對Activator.CreateInstance()的調用。

NHibernate的IoC支持功能的重點是用對所提供的自定義ByteCodeProvider的調用替換對Activator.CreateInstance的調用。

所以我想我的問題是這樣的:是否有可能得到這與流利NHibernate的工作,或者我必須廢棄我的流利NH配置,並返回到NHibernate的內置編程配置?

鏈接到博文關於此功能:

更新:它看起來像問題是與FluentNHibernate的操控ICompositeUserType的自定義實現的。我將我的複合用戶類型更改爲IUserType(這可能更適合於實際的類),它看起來像Fluent NHibernate現在正在合作。

更新#2:添加一個空的構造函數確實解決了這個問題 - 我將它標記爲已回答,但建議發表評論而不是答案,所以我對這些評論進行了upvoting(直到正式答案是添加)。

+0

我不知道答案,但我敢肯定你可以自由地混合使用XBM和流暢的映射,所以無論如何你都不需要放棄整個FNH的努力。 – Jay 2011-01-07 17:45:04

+1

如果您提供默認的空構造函數(public或protected),會發生什麼情況? – 2011-01-07 18:20:44

回答

0

請記住,所有Fluent NHibernate都會創建與utilziing NHibernate XML相同的配置對象結構。你如何嘗試通過流利NHibernate設置ByteCodeProvider?