Доступ к свойству дочернего класса из базового класса во время выполнения в C#
У меня есть WorkflowBase
класс, который я определяю некоторую логику состояния в нем, и он использует библиотеку без сохранения состояния.
Мои доменные объекты наследуют WorkflowBase
класс для реализации функции триггеров состояния (используя delegate
) и я регистрирую эти переходы состояний в базе данных.
Вот мой базовый класс:
public class WorkflowBase
{
public delegate void EntryExitDelegate();
private readonly StateMachine<State, Trigger> stateMachine = null;
public EntryExitDelegate OnCreatedStateEntry = null;
public EntryExitDelegate OnConfConStateEntry = null;
public EntryExitDelegate OnConfSupStateEntry = null;
public WorkflowBase()
{
CurrentState = State.CreatedState;
stateMachine = new StateMachine<State, Trigger>(() => CurrentState, s => CurrentState = s);
stateMachine.Configure(State.CreatedState)
.OnEntry(() => { if (OnCreatedStateEntry != null) OnCreatedStateEntry(); })
.PermitIf(Trigger.ConfCon, State.ConfConState, () => { return GuardClauseFromCreatedStateToConfConStateUsingTriggerConfCon(); })
;
stateMachine.Configure(State.ConfConState)
.OnEntry(() => { if (OnConfConStateEntry != null) OnConfConStateEntry(); })
.PermitIf(Trigger.ConfSup, State.ConfSupState, () => { return GuardClauseFromConfConStateToConfSupStateUsingTriggerConfSup(); })
.PermitIf(Trigger.ReturnSup, State.ReturnSupState, () => { return GuardClauseFromConfConStateToReturnSupStateUsingTriggerReturnSup(); })
;
stateMachine.Configure(State.ConfSupState)
.OnEntry(() => { if (OnConfSupStateEntry != null) OnConfSupStateEntry(); })
.PermitIf(Trigger.ConfManSup, State.ConfManSupState, () => { return GuardClauseFromConfSupStateToConfManSupStateUsingTriggerConfManSup(); })
.PermitIf(Trigger.ReturnManSup, State.ReturnManSupState, () => { return GuardClauseFromConfSupStateToReturnManSupStateUsingTriggerReturnManSup(); })
public bool TryFireTrigger(Trigger trigger)
{
if (!stateMachine.CanFire(trigger))
{
return false;
}
stateMachine.Fire(trigger);
return true;
}
}
Производные классы реализуют триггеры делегатов:
public class Soorat : WorkflowBase
{
public Guid ID { get; set; } // I want to access this from base class :|
private void Created()
{
// some initial log (this method DOESN'T CALLED!)
}
private void ConfCon()
{
// some log in this state
}
private void ConfSup()
{
// some log in this state
}
public Soorat() //child class constructor
{
OnCreatedStateEntry = new EntryExitDelegate(Created);
OnConfConStateEntry = new EntryExitDelegate(ConfCon);
OnConfSupStateEntry = new EntryExitDelegate(ConfSup);
}
я знаю почему Created
Метод не вызывает в первую очередь. Это потому, что перед вызовом конструктора дочернего класса, состояние CreatedState
уже, и у дочернего класса нет возможности делегировать Create
метод, прежде чем он входит в CreatedState
,
Мне нужно получить доступ к ID
дочернего класса с базы, чтобы я мог войти. Есть способ сделать это? или есть другое решение моей проблемы?
Заранее спасибо!