如何使用NHibernate 3.3进行依赖注入?

时间:2013-03-06 17:48:16

标签: nhibernate dependency-injection

我正在尝试使用Interceptor在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();

有关我应该寻找什么的任何提示?

1 个答案:

答案 0 :(得分:0)

好吧,经过一夜的睡眠,我找到了解决方案:拦截器将实例化的类需要声明为Lazy = false。

这样NHibernate不期待代理,一切正常。