PmEngine.Core
1.0.1123.1751
See the version list below for details.
dotnet add package PmEngine.Core --version 1.0.1123.1751
NuGet\Install-Package PmEngine.Core -Version 1.0.1123.1751
<PackageReference Include="PmEngine.Core" Version="1.0.1123.1751" />
paket add PmEngine.Core --version 1.0.1123.1751
#r "nuget: PmEngine.Core, 1.0.1123.1751"
// Install PmEngine.Core as a Cake Addin #addin nuget:?package=PmEngine.Core&version=1.0.1123.1751 // Install PmEngine.Core as a Cake Tool #tool nuget:?package=PmEngine.Core&version=1.0.1123.1751
PMEngine.Core
Что это?
Это ядро движка, предназначенного для текстовых интерактивных приложений, например для ботов Telegram, других мессенеджеров, браузерных приложений или просто консоли. Движок умеет обрабатывать действия пользователя, управлять ими, выполнять команды, поддерживает модульность.
Рекомендуемые модули
...
Список исползуемых переменных среды
В ядре используются следующие переменные среды:
PROVIDER_TYPE = INT от 0 до 2, где 0 - PostgreSQL, 1 - SQLite, 2 - InMemory (SQLite)
CONNECTION_STRING = Строка подключения к БД, которая будет использована в BaseContext. Должна соответствовать провайдеру, указанному в PROVIDER_TYPE
Основы
Регистрация в DI
Для работы движка в вашем приложении его сперва необходимо добавить в DI контейнер:
builder.Services.AddPMEngine((e) =>
{
e.Properties.InitializationAction = typeof(HelloWorldAction); // Указываем стартовое действие пользователя
e.Properties.DataProvider = DataProvider.PG; // Указываем тип соединения, если не хотим исползовать переменные среды
});
После чего его нужно сконфигурировать:
var app = builder.Build();
app.ConfigureEngine();
Работа с вводом и выводом
Ввод
Ввод информации в движок можно осуществлять откуда угодно. Для этого достаточно взять пользователя и вызвать у него ActionProcess() или использовать следующую конструкцию:
var processor = serviceProvider.GetRequiredService<IEngineProcessor>();
await processor.ActionProcess(session.InputAction, session, session.InputAction.Arguments);
Вывод
Для вывода информации используется сервис IOutputManager
. Изначально он отсутсвует в движке и предполагается, что он будет добавлен внешними подключаемыми модулями.
Чтобы с помощью него отправить что-то пользователю, достаточно вызвать метод IUserSession.Output.ShowContent()
.
У каждого пользователя свой экземпляр IOutputManager. Так же для того, чтобы взять конкретную реализацию - достаточно вызвать IUserSession.GetOutput<TOutput>()
.
Работа с данными
Для работы с данными есть два пути:
- Использовать BaseContext
- Использовать свой DataContext
Теперь подробнее о каждом.
BaseContext
BaseContext - это универсальный контекст, который использует для подключения данные из переменных среды. Он автоматически подгружает в себя все зарегистрированные типы сущностей, которые реализуют интерфейс IDataEntity. Для создания миграций с ним потребуется создать дополнительный контекст, который наследует BaseContext, после чего можно делать миграцию.
Важно! При создании миграции убедитесь, что она НЕ конфликтует с имеющимися данными в БД. Для этого достаточно удалить все ссылки на UserEntity, UserLocalEntity и др.
Так же для успешного создания миграции у вашего контекста должен быть конструктор public MyContext(IEngineConfigurator? configurator = null) : base(configurator)
.
Если принято решение использовать BaseContext, то необходимо указать параметры подключения в переменных среды (см используемые переменные среды) либо использвовать провайдер SQLite/InMemory (они не требуют заполнения переменных сред, SQLite имеет конфиг по умолчанию, InMemory в конфиге не нуждается)
Далее все сущности, которые будут исползованы в проекте должны реализовывать интерфейс IDataEntity
или наследовать базовый класс BaseEntity
.
Для работы с таким контекстом необходимо использовать DI. Для этого уже реализован метод, открывающий контекст, выполняющий в нем действия, а после закрываюющий его.
await user.Services.InContext(async (context) =>
{
DoSomthing ...
});
Если вы хотите комбинировать несколько контекстов, реализованных от BaseContext (например разные строки подключения, разделить контексты на ReadonlyContext и ReaadWriteCotnext) то вы можете использовать InContext<T>
await user.Services.InContext<ReadonlyContext>(async (context) =>
{
DoSomthing ...
});
Все свои контексты необходимо добавить в DI в формате transient как реализацию IDataContext.
services.AddTransient(typeof(IDataContext), typeof(ReadonlyContext));
Свой контекст, но не BaseContext
Вы можете использовать сколько угодно контекстов, как угодно и каких угодно.
Ядро движка по прежнему будет работать в пределах BaseContext, но внутри ваших модулей вы абсолютно свободны.
Если вы собираетесь делать дополнительные модули, доступные для других пользователей - то рекоменудется использовать базовый функционал работы с контекстами, чтобы упростить другим работу с вашими модулями.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net7.0
- Microsoft.AspNetCore.Http.Abstractions (>= 2.2.0)
- Microsoft.EntityFrameworkCore (>= 7.0.14)
- Microsoft.EntityFrameworkCore.InMemory (>= 7.0.14)
- Microsoft.EntityFrameworkCore.Proxies (>= 7.0.14)
- Microsoft.EntityFrameworkCore.Sqlite (>= 7.0.14)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 7.0.11)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on PmEngine.Core:
Package | Downloads |
---|---|
PmEngine.Telegram
Дополнение для работы с Telegram |
|
PmEngine.Vk
Дополнение для ВК |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.88.1023.1008 | 177 | 10/23/2024 |
1.88.1023.936 | 68 | 10/23/2024 |
1.88.1023.927 | 75 | 10/23/2024 |
1.88.1022.2312 | 91 | 10/22/2024 |
1.88.1007.1852 | 212 | 10/7/2024 |
1.88.826.1245 | 384 | 8/26/2024 |
1.88.816.1430 | 252 | 8/16/2024 |
1.88.806.2236 | 104 | 8/6/2024 |
1.88.519.2155 | 819 | 5/19/2024 |
1.88.519.2145 | 107 | 5/19/2024 |
1.88.519.2138 | 109 | 5/19/2024 |
1.88.519.1902 | 133 | 5/19/2024 |
1.88.519.1754 | 328 | 5/19/2024 |
1.88.517.2153 | 189 | 5/17/2024 |
1.88.412.2013 | 542 | 4/12/2024 |
1.88.412.1945 | 248 | 4/12/2024 |
1.81.411.1133 | 125 | 4/11/2024 |
1.81.411.1118 | 145 | 4/11/2024 |
1.1.128.2351 | 879 | 1/28/2024 |
1.1.128.2338 | 109 | 1/28/2024 |
1.1.115.151 | 352 | 1/14/2024 |
1.1.115.132 | 104 | 1/14/2024 |
1.1.115.119 | 124 | 1/14/2024 |
1.1.115.52 | 111 | 1/14/2024 |
1.1.110.2017 | 114 | 1/10/2024 |
1.0.1214.2020 | 329 | 12/14/2023 |
1.0.1209.2359 | 329 | 12/9/2023 |
1.0.1207.2056 | 129 | 12/7/2023 |
1.0.1207.2037 | 127 | 12/7/2023 |
1.0.1123.1751 | 195 | 11/23/2023 |