如果我有一个实体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);
}
}
答案 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);
}
}