Доступ к свойству дочернего класса из базового класса во время выполнения в 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 дочернего класса с базы, чтобы я мог войти. Есть способ сделать это? или есть другое решение моей проблемы?

Заранее спасибо!

0 ответов

Другие вопросы по тегам