Jason State é uma implementação simples de máquina de estado. É configurado por um arquivo json.
| Pacote | |
|---|---|
| Jasonstate | |
| Jasonstate.extension |
Os comandos a seguir podem ser usados para instalar Jasonstate e Jasonstate.extension, execute o seguinte comando no console do gerenciador de pacotes
dotnet add package JasonState
dotnet add package JasonState.Extension
Ou use dotnet cli
dotnet add package JasonState
dotnet add package JasonState.Extension
Primeiro, você precisa fornecer um arquivo JSON válido. Este arquivo JSON deve conter uma matriz de estados . Esta matriz deveria ter
objetos.
Array contém
objetos Um exemplo de um arquivo JSON válido pode ser encontrado através 
{
"States" : [
{
"Namespace" : " TestClient.Impls.States " ,
"Name" : " InitialState " ,
"NextState" : [
{
"Condition" : " !string.IsNullOrEmpty(FromEmail) && FromEmail.Equals( " [email protected] " ) " ,
"State" : " ValidatePaymentState "
},
{
"Condition" : " !string.IsNullOrEmpty(FromEmail) && FromEmail.Equals( " [email protected] " ) " ,
"State" : " FinalState "
}
],
"ErrorState" : " ErrorState "
},
{
"Namespace" : " TestClient.Impls.States " ,
"Name" : " ErrorState " ,
"NextState" : [
{
"Condition" : " true " ,
"State" : " FinalState "
}
],
"ErrorState" : null
},
{
"Namespace" : " TestClient.Impls.States " ,
"Name" : " FinalState " ,
"NextState" : null ,
"ErrorState" : null
}
]
} Os estados devem herdar de
e implementar o método executado ou executado , com o seu contexto de estado. Você pode usar qualquer estrutura de injeção de dependência para injeções de construção. Não vai quebrar nada.
public class InitialState : BaseState < TestStateContext >
{
public override void Execute ( TestStateContext context )
{
// do the magic
}
}O Jason State permite que você adicione qualquer tipo de objeto ao contexto. Tudo o que você precisa durante a execução do estado deve estar no contexto.
public class TestStateContext
{
public long CreditCardNumber { get ; set ; }
public string CardHolderName { get ; set ; }
public decimal Amount { get ; set ; }
}
public class InitialState : BaseState < TestStateContext >
{
public override void Execute ( TestStateContext context )
{
context . CreditCardNumber = "4545454545454545" ;
}
}Ao referenciar Jasonstate.extension, registre as dependências necessárias à serviceCollection da seguinte maneira
serviceCollection . AddJasonState < TestStateContext > ( ) ;ou
serviceCollection . AddAsyncJasonState < TestStateContext > ( ) ; TestClient pode ser encontrado
Assínctestclient pode ser encontrado 
Licenciado no MIT, consulte a licença para o texto completo.