Если вы снова посмотрите на подпись PostActivityAsync()
, вы действительно увидите, что требует Activity
типа , а не IMessageActivity
.
public async Task<InvokeResponse> PostActivityAsync(string fromBotId, BotFrameworkSkill toSkill, Uri callbackUrl, Activity activity, CancellationToken cancellationToken)
Глядя на Activity
, вы можете видеть, что Activity реализует все типы Activity, позволяя вам приводить их вперед и назад без проблем
public partial class Activity :
IActivity,
IConversationUpdateActivity,
IContactRelationUpdateActivity,
IInstallationUpdateActivity,
IMessageActivity,
IMessageUpdateActivity,
IMessageDeleteActivity,
IMessageReactionActivity,
ISuggestionActivity,
ITypingActivity,
IEndOfConversationActivity,
IEventActivity,
IInvokeActivity,
ITraceActivity,
IHandoffActivity { // ... }
Кроме того, если вы посмотрите на IInvokeActivity
public interface IInvokeActivity : IActivity
Он реализует IActivity
, который указывает, что классы, реализующие его, должны иметь IInvokeActivity AsInvokeActivity();
.
Итак, чтобы ответить Ваш вопрос: когда вы передаете ваш IInvokeActivity
в PostActivityAsync()
, используйте метод AsInvokeActivity()
, чтобы преобразовать его в InvokeActivity.
await _skillClient.PostActivityAsync(_botId, targetSkill, _skillsConfig.SkillHostEndpoint, (Activity)turnContext.Activity.AsInvokeActivity(), cancellationToken);