Если у меня есть объект 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);
}
}
Можете ли вы передать стратегию во время выполнения расчета?
myEntity.Calculate(myStrategy);
Как насчет инверсии отношения между стратегией и сущностью?
myStrategy.Calculate(myEntity);
Или, DI стратегия с использованием вложения свойств?
EntityObjects не имеют конструктора, определенного в их сгенерированном коде, поэтому вы можете просто добавить его в частичный класс:
public partial class MyEntity
{
public MyEntity()
{
// Whatever logic to determine your strategy
}
}
Как бы вы делали свои вычисления по-разному, зависит от того, что именно вы пытаетесь сделать. Если вы хотите каким-то образом передать дополнительные параметры конструктору, я не думаю, что вы можете, поэтому вам придется обойти это.
Также вы просмотрели inheritance в Entity Framework? Основываясь на значении некоторого столбца/свойства, вы можете использовать его в другом подклассе, который может иметь различные реализации различной бизнес-логики, используя частичные классы с методами и свойствами abstract
и/или virtual
.
Конечно, вы можете изменить поведение после создания объекта, но я чувствую, что это не то, что вы хотите? Можете ли вы получить доступ к factory статическим способом? Или как статический класс, метод или свойство?
MyFactory.Current = new MyFactory(parameters);
public partial class MyEntity
{
public MyEntity()
{
_calcStrategy = MyFactory.Current.ProvideCalculator(this);
}
}