Расширение на перехват действий в обсуждениях
Расширение на перехват действий в обсуждениях¶
Реализация расширения¶
public class ForumCardRequestExtension : CardRequestExtension
{
private static readonly Func<Dictionary<string, object>, ForumProviderExtensions.ForumProviderAddTopicRequestObject> topicRequestFactory =
p => new ForumProviderExtensions.ForumProviderAddTopicRequestObject(p);
private static readonly Func<Dictionary<string, object>, ForumProviderExtensions.ForumProviderSendMessageRequestObject> messageRequestFactory =
p => new ForumProviderExtensions.ForumProviderSendMessageRequestObject(p);
private static readonly Func<Dictionary<string, object>, ForumProviderExtensions.ForumProviderParticipantsRequestObject> participantsRequestFactory =
p => new ForumProviderExtensions.ForumProviderParticipantsRequestObject(p);
#region Base Overrides
public override async Task AfterRequest(ICardRequestExtensionContext context)
{
if (!context.RequestIsSuccessful)
{
return;
}
if (context.RequestType == ForumProviderExtensions.ForumRequestTypes.AddTopic)
{
var rObj = context.Request.GetRequestObject(topicRequestFactory);
var title = rObj.Topic.Title;
var description = rObj.Topic.Description;
}
if(context.RequestType == ForumProviderExtensions.ForumRequestTypes.AddMessage)
{
var rObj = context.Request.GetRequestObject(messageRequestFactory);
var message = rObj.Message;
var htmlText = message.Body.Text;
var authorID = message.AuthorID;
}
if(context.RequestType == ForumProviderExtensions.ForumRequestTypes.AddParticipants)
{
var rObj = context.Request.GetRequestObject(participantsRequestFactory);
var userIDs = rObj.Participants.ToList();
}
if(context.RequestType == ForumProviderExtensions.ForumRequestTypes.AddRoles)
{
var rObj = context.Request.GetRequestObject(participantsRequestFactory);
var rolesIDs = rObj.Participants.ToList();
}
}
#endregion
}
Регистрация расширения¶
[Registrator]
public sealed class Registrator : RegistratorBase
{
public override void RegisterExtensions(IExtensionContainer extensionContainer)
{
extensionContainer
.RegisterExtension<ICardRequestExtension, ForumCardRequestExtension>(x => x
.WithOrder(ExtensionStage.BeforePlatform, 1)
.WithUnity(this.UnityContainer)
.WhenRequestTypes(
ForumProviderExtensions.ForumRequestTypes.AddTopic,
ForumProviderExtensions.ForumRequestTypes.AddParticipants,
ForumProviderExtensions.ForumRequestTypes.AddRoles,
ForumProviderExtensions.ForumRequestTypes.AddMessage));
}
}