8

我想知道如何告诉 NHibernate 解决对我的 POCO 域对象的依赖关系。

我发现CalculateOrderTax 之类的方法应该在Domain 对象中,因为它们对特定于域的业务规则进行编码。但是一旦我有两个,我就违反了 SRP。

将这些方法提取到 Strategy 类中没有问题,但我想知道如何让 NHibernate 加载这些方法。

在将对象移交给更高层之前,循环遍历存储库中的对象列表以执行基于 get/set 的依赖注入似乎不是一个好的解决方案。

我现在也在使用 Castle Windsor 进行依赖注入。

4

3 回答 3

8

我一直在使用拦截器来完成类似的任务:

修改加载实体的拦截器:

public class MyInterceptor : EmptyInterceptor
{
    public override bool OnLoad(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
        return InjectDependencies(entity as MyEntity);
    }
}

将其与会话关联:

nhSessionFactory.OpenSession(myInterceptor);

我还在某处读到,在即将发布的 2.1 版本中会更好地支持自定义构造函数注入,但我现在似乎找不到参考。

于 2008-12-04T15:36:04.343 回答
1

由于目前似乎没有人能够回答您的问题,我想我建议您重组您的代码,以消除订单计算自己的税款的需要。

您可以将它委托给 OrderTaxService,它接受一个 Order 对象并返回一个 OrderValue 对象或类似的东西。

这会将逻辑保留在您的域中,但无需将其附加到您的 Order 对象。

于 2008-12-04T14:29:14.993 回答
1

我同意 Garry 的观点,即您应该尽可能地从域对象中删除服务依赖项。有时它是有意义的,例如加密/解密。在这种情况下,您可以使用拦截或 IUserType 将其隐藏在基础架构中。我认为后者在您可以使用时是有利的。 本文详细介绍了如何做到这一点。我正在这样做,它工作得很好。

于 2008-12-04T17:49:23.887 回答