【发布时间】:2011-02-15 14:51:26
【问题描述】:
我一直在尝试实施类似于 Ayende 在他的 MSDN 文章 Building a Desktop To-Do Application with NHibernate 中发布的解决方案。幸运的是,Skooletz 写了一篇类似的文章,在他的关于 NHibernate 拦截器魔术技巧的 3 部分博客文章(1、2、3)中跟进了我想要完成的工作。在实例化对象时,我无法让 NHibernate 调用我的 POCO 对象的参数化构造函数。
当我删除受保护的无参数构造函数时,NHibernate 抱怨 InvalidProxyTypeException:“以下类型可能不能用作代理: YourNamespace.YourClass: type 应该有一个可见的(公共的或受保护的)无参数构造函数”。如果我然后添加受保护的默认构造函数,NHibernate 不再抱怨,但永远不会调用依赖项(在重载的构造函数中)导致应用程序当依赖不满足时,在运行时抛出 NullReferenceException。
public MyClass
{
IRequiredDependency dependency;
public MyClass(IRequiredDependency dependency)
{
this.dependency = dependency;
}
protected MyClass() {}
}
我似乎无法让 NHibernate 调用重载的构造函数。有什么想法吗?
【问题讨论】:
-
什么是“依赖项(在重载的构造函数中)”?能提供一点代码吗?
-
你是调用了参数化的构造函数,还是以某种方式通过拦截器初始化了依赖关系?
-
能否展示相关的拦截器代码?
-
相关拦截器代码请参考上文引用的使用NHibernate构建桌面待办应用一文。
标签: nhibernate dependency-injection ioc-container