PmEngine.Core 1.0.1123.1751

There is a newer version of this package available.
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                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PmEngine.Core" Version="1.0.1123.1751" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add PmEngine.Core --version 1.0.1123.1751                
#r "nuget: PmEngine.Core, 1.0.1123.1751"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// 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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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