如何将行为注入实体框架对象构造函数?

时间:2009-07-28 17:31:18

标签: c# entity-framework dependency-injection

如果我有一个实体EntityA,它是一个Entity Framework对象,我将如何在创建时注入不同的行为?

这些特定实体需要针对某些计算使用不同的策略。我想在创建对象时使用DI来提供正确的策略。有没有办法拦截?

添加了: 我考虑下面的两个模式(只是伪获得点)。

        public partial class Entity
    {
          public Entity(ICalculationStrategy strategy)
          {
              _calcStrategy = strategy;
          }
    }

public partial class Entity
        {
              public Entity(ICalculationFactory factory)
              {
                  _calcStrategy = factory.ProvideCalculator(this);
              }
        }

2 个答案:

答案 0 :(得分:2)

您可以在执行计算时传递策略吗?

myEntity.Calculate(myStrategy);

如何反转策略与实体之间的关系?

myStrategy.Calculate(myEntity);

或者,DI使用属性注入策略?

答案 1 :(得分:1)

EntityObjects在其生成的代码中没有定义任何构造函数,因此您只需在分部类中添加一个:

public partial class MyEntity
{
    public MyEntity()
    {
         // Whatever logic to determine your strategy
    }
}

如何以不同的方式进行计算,取决于您尝试做的完全。如果你想以某种方式将额外的参数传递给构造函数,我认为你不能,所以你必须解决这个问题。

另外,您是否查看了实体框架中的inheritance?基于某些列/属性的值,您可以使用不同的子类,通过使用具有abstract和/或virtual方法的部分类,可以使用不同业务逻辑的不同实现和属性。

当然,您可以在实例化对象后更改行为,但我觉得这不是您想要的?你能以静态的方式进入工厂吗?作为静态类,方法还是属性?

MyFactory.Current = new MyFactory(parameters);

public partial class MyEntity
{
    public MyEntity()
    {
        _calcStrategy = MyFactory.Current.ProvideCalculator(this);
    }
}