インターセプターを使用して NHibernate 3.3 エンティティで DI を実行しようとしています。
私のコードは次のとおりです。
public override object Instantiate( string clazz, EntityMode entityMode, object id ) {
if( entityMode == EntityMode.Poco ) {
dynamic x = _mappings.RootClasses.FirstOrDefault( hc => hc.Name.StartsWith( clazz ) );
if( x == null )
x = _mappings.SubClasses.FirstOrDefault( sc => sc.Name.StartsWith( clazz ) );
if( x == null )
x = _mappings.UnionSubclasses.FirstOrDefault( usc => usc.Name.StartsWith( clazz ) );
if( x != null ) {
Type type = Type.GetType( x.Name ); //Assembly.GetAssembly( typeof( Person ) ).GetTypes().FirstOrDefault( x => x.FullName == clazz );
if( type != null ) {
if( _kernel.HasComponent( type ) ) {
object instance = _kernel.Resolve( type );
_session
.SessionFactory
.GetClassMetadata( clazz )
.SetIdentifier( instance, id, entityMode );
return instance;
}
}
}
}
return base.Instantiate( clazz, entityMode, id );
}
返されるインスタンスに問題はありません。ウォッチ ウィンドウ内で Id が適切に設定されていることを確認できます。
しかし、オブジェクトを覗き込まずにそのままにしておくとすぐに、次の例外が発生します: 間違ったタイプの ID が提供されました。想定: System.Int32、UtenteProxy を取得
次の呼び出しでも同じ例外が発生します: _session.CreateCriteria().List();
何を探すべきかについてのヒントはありますか?