【问题标题】:Castle.Windsor: Resolving Type with empty protected constructorCastle.Windsor:使用空的受保护构造函数解析类型
【发布时间】:2010-10-18 23:11:07
【问题描述】:

我正在使用 NHibernate + Castle.Windsor 为我的实体添加一些行为。这意味着 NHibernate 通过 Windsor 创建实体。这意味着我必须有一个默认的空构造函数,以便 Windsor 能够实例化我的实体。我不喜欢这个有很多原因,主要是我不喜欢让物体处于不稳定状态。

有没有什么方法可以在没有公共无参数构造函数的情况下实例化实体?

更多信息:我尝试为我的实体使用自定义激活器,但这不起作用,因为 Windsor 在检测到无法解决依赖关系时抛出异常,因此在使用我的激活器之前它会发生故障。

一些代码:

public class Product
{
    public string Name { get; set; }
    public Product(string name)
    {
        Name = name;
    }
    protected Product() { }
}

假设我有上述实体:如果我尝试通过 Windsor 解析该实体,它会抛出一个异常,告诉我 Product 正在等待一些未注册的依赖项。如果我单独使用 NHibernate,一切正常。所以,基本上我试图在通过 Windsor 解析我的实体的同时模拟 NHibernate 在那种情况下的行为。

提前致谢,

豪尔赫·巴尔加斯。

【问题讨论】:

  • string name 不能是 Windsor 组件。不知道你想让温莎在那里填写什么。
  • 我不想让温莎填满任何东西,这就是我的观点。我希望它选择受保护的构造函数,NHibernate 的工作方式。或者我不知道在 NHibernate 创建代理之后是否还有其他方法可以添加一些拦截器。我想要做的是像在 ChinookMediaManager 中那样进行自动 PropertyChanged 通知,但如果我的实体没有通过 Windsor 解析,我就不能这样做。我希望这能让你更好地理解我想要做什么。谢谢毛里西奥。

标签: castle-windsor


【解决方案1】:

您不需要在 NHibernate 实体中使用无参数构造函数或编写自定义 Windsor 激活器。见this article

【讨论】:

  • 我已经看过那篇文章,但我没有遇到这个问题。我用更多信息更新了我的问题,我希望你知道一种方法来做我所问的。谢谢。
猜你喜欢
  • 2011-05-30
  • 2012-11-23
  • 2018-06-15
  • 2014-08-29
  • 1970-01-01
  • 2016-04-07
  • 2012-06-04
  • 2021-10-05
  • 2012-12-07
相关资源
最近更新 更多