我需要从僵尸框架中的一个waterfallStep编写CosmosDB,如何才能注入依赖,这个waterfallStep是一个静态委托。
谢谢
发布于 2019-04-05 02:52:28
您可以通过构造函数注入来注入DbContext。
服务注册无效服务(IServiceCollection
DbContext
公共类MultiTurnPromptsBot : IBot {私有只读ApplicationDbContext _context;私有常量字符串WelcomeText =“欢迎使用MultiTurnPromptBot。此机器人将使用提示符引入多轮操作。键入任何内容即可开始。”;私有只读MultiTurnPromptsBotAccessors _accessors;私有DialogSet _dialogs;公共MultiTurnPromptsBot( MultiTurnPromptsBotAccessors accessors,ApplicationDbContext context) { _accessors = accessors ??抛出新的访问器(ArgumentNullException(Accessors));_context = context;// DialogSet需要一个DialogState访问器,当它有一个turn上下文时,它会调用它。_dialogs = new DialogSet(accessors.ConversationDialogState);//此数组定义如何执行瀑布。var waterfallSteps = new WaterfallStep[] { NameStepAsync,NameConfirmStepAsync,};//将命名对话框添加到DialogSet中这些名称保存在对话状态中。_dialogs.Add(新建WaterfallDialog("details",waterfallSteps));_dialogs.Add(新建名称(“TextPrompt”));}私有异步任务NameConfirmStepAsync(WaterfallStepContext stepContext,CancellationToken cancellationToken) { //从用户状态获取当前配置文件对象。var _accessors.UserProfile.GetAsync(stepContext.Context,= await var () => new UserProfile(),cancellationToken);//更新配置文件。userProfile.Name = (string)stepContext.Result;_context.Add(新用户{ Name = userProfile.Name });_context.SaveChanges();//我们可以在WaterfallStep中的任何位置向用户发送消息。await stepContext.Context.SendActivityAsync(MessageFactory.Text($"Thanks {stepContext.Result}."),cancellationToken);// WaterfallStep总是以瀑布的结尾或另一个对话框结束;这里是一个提示对话框。return await stepContext.PromptAsync("confirm",新提示符{ PromptOptions =MessageFactory.Text(“你愿意说出你的年龄吗?”) },cancellationToken);} }
https://stackoverflow.com/questions/55524305
复制