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.519.2155 547 5/19/2024
1.88.519.2145 85 5/19/2024
1.88.519.2138 80 5/19/2024
1.88.519.1902 99 5/19/2024
1.88.519.1754 120 5/19/2024
1.88.517.2153 146 5/17/2024
1.88.412.2013 516 4/12/2024
1.88.412.1945 153 4/12/2024
1.81.411.1133 103 4/11/2024
1.81.411.1118 114 4/11/2024
1.1.128.2351 856 1/28/2024
1.1.128.2338 80 1/28/2024
1.1.115.151 320 1/14/2024
1.1.115.132 77 1/14/2024
1.1.115.119 95 1/14/2024
1.1.115.52 88 1/14/2024
1.1.110.2017 97 1/10/2024
1.0.1214.2020 297 12/14/2023
1.0.1209.2359 284 12/9/2023
1.0.1207.2056 105 12/7/2023
1.0.1207.2037 107 12/7/2023
1.0.1123.1751 167 11/23/2023