首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate和IoC IInterceptor

NHibernate和IoC IInterceptor
EN

Stack Overflow用户
提问于 2011-02-15 22:51:27
回答 1查看 1.3K关注 0票数 2

我一直在尝试实现一个类似于Ayende在他的MSDN文章Building a Desktop To-Do Application with NHibernate中发布的解决方案。幸运的是,Skooletz写了一篇类似的文章,在他关于NHibernate拦截器魔术(123)的3部分博客文章中,跟进了我试图实现的目标。在实例化POCO对象时,我无法让NHibernate调用POCO对象的参数化构造函数。

当我删除受保护的无参数构造函数时,NHibernate报告InvalidProxyTypeException:“以下类型可能不能用作代理: YourNamespace.YourClass:类型应具有可见的(公共的或受保护的)无参数构造函数”。如果我随后添加了受保护的默认构造函数,NHibernate将不再报错,但不会调用依赖项(在重载的构造函数中),从而导致应用程序在运行时未满足依赖项时使用NullReferenceException。

代码语言:javascript
复制
public MyClass
{
    IRequiredDependency dependency;

    public MyClass(IRequiredDependency dependency)
    {
        this.dependency = dependency;
    }

    protected MyClass() {}
}

我似乎不能让NHibernate调用重载的构造函数。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-16 01:12:37

在IoC容器的配置中,除了依赖项本身之外,还必须使用依赖项来声明您的类型。

代码语言:javascript
复制
        container.RegisterType<IRequiredDependency, RequiredDependency>();
        container.RegisterType<MyClass, MyClass>();

我错过了来自Pablo's post的小花边新闻(除了它的依赖项IInvoiceTotalCalculator之外,他还注册了Invoice类),因为我使用的是Unity而不是Windsor。

另一个注意事项:我发现的是,如果您想要有任何其他重载构造函数,请将它们设为内部构造函数,将默认构造函数保留为受保护的,并且只有一个包含依赖项的公共构造函数。这个花边新闻帮助我加强了一些类的API设计。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5005120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档