Статор-это простой, ди-ориентированный, вдохновленный Redux или эксперимент с моделью-объездом (MVU) с использованием C# 9.0. Это хорошо работает с Blazor и MobileBlazorBindings, включая обмен состояниями между части Xamarin и Blazor Part в гибридном мобильном приложении. Это также должно работать с любой другой клиентской моделью .NET.
По состоянию на 2021-04-08, проект не поддерживает .NET Standard 2.0, только .NET 5+
Этот проект использует:
| Имя | Nuget.org | Feedz.io |
|---|---|---|
dotnet add package StateR | ||
dotnet add package StateR.Blazor | ||
dotnet add package StateR.Blazor.Experiments | ||
dotnet add package StateR.Experiments |
Следующий фрагмент представляет функцию, окружающую счетчик, где вы можете Increment , Decrement и Set значение свойства Count этого Counter.State . Фрагмент также включает в себя InitialState этого счетчика.
services
. AddStateR ( appAssembly )
. AddAsyncOperations ( ) // Add support for Redux thunk-like helpers
. AddReduxDevTools ( ) // Add support for Redux DevTools
. Apply ( )
; using StateR ;
namespace BlazorMobileHybridExperiments . Features
{
public class Counter
{
public record State ( int Count ) : StateBase ;
public class InitialState : IInitialState < State >
{
public State Value => new State ( 0 ) ;
}
public record Increment : IAction ;
public record Decrement : IAction ;
public class Reducers : IReducer < State , Increment > , IReducer < State , Decrement >
{
public State Reduce ( State state , Increment action ) => state with { Count = state . Count + 1 } ;
public State Reduce ( State state , Decrement action ) => state with { Count = state . Count - 1 } ;
}
}
} Затем из блазорного компонента, который наследует от StatorComponent , мы можем отправить эти действия.
@page "/counter"
@inherits StateR . Blazor . StatorComponent
@inject IState < Features . Counter . State > CounterState
< h1 > Counter < / h1 >
< p > Current count : @CounterState . Current . Count < / p >
< button class = "btn btn-primary" @onclick = "@(async () => await DispatchAsync(new Features.Counter.Increment()))" > + < / button >
< button class = "btn btn-primary" @onclick = "@(async () => await DispatchAsync(new Features.Counter.Decrement()))" > - < / button >Не необходимо наследовать от
StatorComponent, компонент (или любой класс) может вручную подписаться на любойIState<T>.
Я играл с несколькими другими библиотеками, и я не был на 100% удовлетворен тем, как они делали вещи. Поэтому, играя с MobileBlaSorbindings и новыми гибридными приложениями, я обнаружил, что записи C# 9 отлично подходят для этого. Я начал экспериментировать с преобразующими неизменными типами (записи) и в итоге создал этот проект.
Название StateR , произносится Stator , вдохновлен MediatR , который первоначально использовался под капюшоном, чтобы опосредовать команды.
Статор является стационарной частью роторной системы [...]. Энергия течет через статор в или от вращающегося компонента системы.
Источник: Википедия
Услышав об этом в течение многих лет, я читал об этом и обнаружил, что концепция блестящей, экспериментировала с ней и принял эту идею.
Эта библиотека основана на понятиях, представленных Redux, но .net не JavaScript, и ядро .NET построено вокруг инъекции зависимостей (DI), поэтому я решил воспользоваться этим.
В JavaScript нет никакого типа и нет реального DI, поэтому имеет смысл, что люди там не учитывали это, когда они построили Redux.
Я основал реализацию Redux Devtools на Fluxor, который является аналогичным проектом, который я использовал один раз. Это помогло мне снизить время реализации для подключения статора с Redux Devtools; Спасибо.
...
Пожалуйста, откройте проблему и будьте максимально ясны; Видите , как внести свой вклад? Для получения дополнительной информации.
Если вы хотите внести свой вклад в проект, во -первых, спасибо за ваш интерес и, пожалуйста, прочитайте участие в проектах с открытым исходным кодом для Forevolve для получения дополнительной информации.
Кроме того, пожалуйста, прочитайте Кодекс поведения участника, который применяется ко всем репозиториям.
dotnet test /p:CollectCoverage=true => overage.json
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura => coverge.cobertura.xml
dotnet test --collect:"XPlat Code Coverage" => testresults/{guid} /coverage.cobertura.xml
dotnet tool install -g dotnet-reportgenerator-globaltool
reportgenerator -reports:coverage.cobertura.xml -targetdir:coveragereport -reporttypes:Html
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
reportgenerator " -reports:test**coverage.cobertura.xml " -targetdir:coveragereport -reporttypes:Html