依赖注入和委托 c#

Dependency injection and delegates c#

我正在尝试在此 class 中添加依赖项注入,但我不确定是否可行。

[Serializable]
    public class RootDialog : IDialog<object>
    {
        private Chat _chat;
    private IFixedAnswerService _fixedAnswerService ;

        public RootDialog(IFixedAnswerService fixedAnswerService, Chat chat)    
        {
            _fixedAnswerService = fixedAnswerService;
        }

    public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
        if(_chat.channel = "messenger")
        some code.....

        _fixedAnswerService.find(xxxxx);
    }
}

这样调用:

Chat chat = new Chat
                    {
                        BotId = new Guid(BotId),
                        ConversationId = 1
                     }


await Bot.Conversation.SendAsync(activity, () => new RootDialog(chat));

但我不想传递 IFixedAnswerService 作为参数,我只想传递聊天对象。

我正在像这样绑定 IFixedAnswerService:

kernel.Bind<IFixedAnswerService>().To<FixedAnswerService>();

但我不确定这是否可能。

我看到这是 v3,我假设这是一个现有的机器人,而不是全新的(如果是新的,我建议使用 v4)。

您可以注入生成根对话框的 MakeRoot 对象。但也许更好,将 FixedAnswerService 注入控制器并在 RootDialog 的构造函数中使用它。 https://github.com/microsoft/BotBuilder-Samples/blob/v3-sdk-samples/CSharp/intelligence-Zummer/Controllers/MessagesController.cs#L31

另请查看此答案