Приложенията за добавки се изграждат от класове, които наследяват интерфейса ITfApplicationAddon. Tefter.bg сканира за тези класове при стартиране и ги прави достъпни за потребителите.
Приложенията за добавки също изискват типизирани компоненти за техния жизнен цикъл. Обикновено приложенията за добавки създават свои собствени таблици в базата данни за съхранение и управление на своите данни.
Стандартният процес за създаване и разпространение на приложение за Tefter.bg включва разработване на Razor библиотечен проект и след това разпространение на резултата като NuGet пакет. За практически примери можете да прегледате проектите на съществуващи доставчици, създадени от нас, като:
| Seed Project | GitHub |
| Talk Application | GitHub |
| Asset Application | GitHub |
Обичайната структура на проектите е следната:
Това е обичайната структура на метода и неговите свойства и методи за обратно извикване.
namespace WebVella.Tefter.Seeds.SampleApplication;
public class SampleApp : ITfApplicationAddon
{
public const string ID = "1492d19b-c8b2-4abb-9e88-2b645ba518ff";
public const string NAME = "Sample Application";
public const string DESCRIPTION = "Sample Application Description";
public const string FLUENT_ICON_NAME = "Album";
public Guid Id { get; init;} = new Guid(ID);
public string Name { get; init;} = NAME;
public string Description { get; init;} = DESCRIPTION;
public string FluentIconName { get; init;} = FLUENT_ICON_NAME;
public void OnStart()
{
}
public void OnRegisterDependencyInjections(IServiceCollection services)
{
services.AddSingleton<ISampleAppService, SampleAppService>();
}
}
Тъй като приложенията за добавки могат да имат свои собствени таблици с данни, миграциите се използват за създаване и управление на тези таблици в различни версии.
Типичен клас за миграция трябва да наследи интерфейса ITfApplicationMigration и да има атрибут на клас TfApplicationMigration.
Тези класове се откриват и изпълняват по време на фазата на стартиране на програмата, във възходящ ред въз основа на низа на версията, дефиниран в атрибута.
Ето пример за такава миграция:
using Microsoft.Extensions.DependencyInjection;
namespace WebVella.Tefter.Seeds.SampleApplication.Migrations;
[TfApplicationMigration(SampleApp.ID, "2025.04.04.01")]
public class SampleAppMigration2025040401 : ITfApplicationMigration
{
public Task MigrateDataAsync(ITfApplicationAddon app, IServiceProvider serviceProvider, ITfDatabaseService dbService)
{
ISampleAppService sampleAppService = serviceProvider.GetService<ISampleAppService>();
sampleAppService.AddNote("Test note 1");
sampleAppService.AddNote("Test note 2");
sampleAppService.AddNote("Test note 3");
return Task.CompletedTask;
}
public Task MigrateStructureAsync(ITfApplicationAddon app, TfDatabaseBuilder dbBuilder)
{
dbBuilder
.NewTableBuilder(Guid.NewGuid(), "sample_app_notes")
.WithColumns(columns =>
{
columns
.AddGuidColumn("id", c => { c.WithAutoDefaultValue().NotNullable(); })
.AddShortTextColumn("note_text", c => { c.NotNullable().WithDefaultValue(""); })
.AddDateTimeColumn("created_on", c => { c.WithDefaultValue(DateTime.UtcNow); });
})
.WithConstraints(constraints =>
{
constraints
.AddPrimaryKeyConstraint("pk_sample_app_note_id", c => { c.WithColumns("id"); });
});
return Task.CompletedTask;
}
}
Този компонент позволява приложение да бъде интегрирано в страници на пространство, като позволява на приложението да има собствен тип страница в навигацията на пространството. Той трябва да наследи интерфейса ITfSpacePageAddon. Прочети повече.
Този компонент позволява на приложение да инжектира собствена административна или обща страница на таблото за управление. За страница на административен панел той трябва да наследи интерфейса ITfScreenRegionComponent<TfAdminPageComponentContext>, а за публична страница на таблото за управление интерфейсът е ITfScreenRegionComponent<TfPageComponentContext>. Прочети повече.
Ако имате нужда от конкретна селекция на данни в изгледа на пространството, това е начинът. Прочети повече
Ако имате нужда от специфично представяне на данни в изгледа на пространството, това е начинът.Прочети повече