Изменение программных настроек типового решения
Изменение программных настроек типового решения¶
Некоторые настройки типового решения доступны для изменения в классе KrSettings (Tessa.Extensions.Default.Shared.Settings)
. Для их корректного изменения необходимо написать расширение на настройки ISettingsExtension
.
Note
Расширения на настройки доступны, начиная со сборки 2.4.
Расширение размещают в Tessa.Extensions.Shared
, чтобы настройки были доступны и на клиенте, и на сервере. Если настройки актуальны только для клиента или только для сервера, то расширение можно разместить и зарегистрировать в Tessa.Extensions.Client
или Tessa.Extensions.Server
.
using System;
using System.Threading.Tasks;
using Tessa.Extensions.Default.Shared.Settings;
using Tessa.Platform.Settings;
namespace Tessa.Extensions.Shared.Settings
{
public sealed class AbSettingsExtension : SettingsExtension
{
public override async Task Initialize(ISettingsExtensionContext context)
{
// если настройки не зависят от базы данных, то просто их устанавливаем
KrSettings settings = context.Settings.Get<KrSettings>();
settings.NotificationCheckInterval = TimeSpan.FromMinutes(1);
// настройки, которые хранятся в некоторых карточках в базе данных, необходимо получать
// непосредственно из базы на сервере, т.к. API карточек к этому моменту не инициализировано
if (context.DbScope != null)
{
await using (context.DbScope.Create())
{
Guid currentUserID = context.Session.User.ID;
// мы на сервере, здесь можно получить настройки из базы данных для текущего пользователя
}
}
else
{
// мы на клиенте, можем либо не устанавливать настройки вообще,
// либо загрузить их с сервера вместе с расширениями на IClientInitializationExtension
}
}
}
}
Код регистрации:
using Tessa.Platform.Settings;
namespace Tessa.Extensions.Shared.Settings
{
[Registrator]
public sealed class Registrator : RegistratorBase
{
public override void RegisterExtensions(IExtensionContainer extensionContainer)
{
extensionContainer
.RegisterExtension<ISettingsExtension, AbSettingsExtension>(x => x
.WithOrder(ExtensionStage.AfterPlatform, 1)
.WithSingleton())
;
}
}
}