比方说,我们有一个LoginDialog
(可重复使用的对话框),可以在不同的时间调用,以访问机器人的特定区域/对话框。
作为可重用的对话框,您不希望编写显式调用子对话框。
public class LoginDialog : IDialog<object> {
public async Task StartAsync(IDialogContext context) {
var message = "Insert password";
PromptDialog.Text(context, AfterPassword,
message,
null,
1);
}
public async Task AfterPassword(IDialogContext context, IAwaitable<string> result) {
var password = await result;
var valid = await Mocks.ValidatePasswordMockAsync(password);
if (valid) {
context.Call(new TheDialog(), ResumeAfter);
} else context.Call(new TransferDialog(), ResumeAfter);
}
private async Task ResumeAfter(IDialogContext context, IAwaitable<object> result) {
context.Done<object>(null);
}}
也许您有多个需要登录验证的对话框。
您想要做的是使用反射来重用该对话框?
我试过这样的事情:
public class LoginDialog : IDialog<object> {
private string classToCall;
public LoginDialog(string classToCall) {
this.classToCall = classToCall;
}
public async Task StartAsync(IDialogContext context) {
var message = "Insert password";
PromptDialog.Text(context, AfterPassword, message, null, 1);
}
public async Task AfterPassword(IDialogContext context, IAwaitable<string> result) {
var password = await result;
var valid = await Mocks.ValidatePasswordMockAsync(password);
if (valid) {
var type = Type.GetType(classToCall);
context.Call(Activator.CreateInstance(type), ResumeAfter);
}
else
context.Call(new TransferDialog(), ResumeAfter);
}
private async Task ResumeAfter(IDialogContext context, IAwaitable<object> result) {
context.Done<object>(null);
}
}
我在这一行收到错误:
context.Call(Activator.CreateInstance(type), ResumeAfter);
无法从用法中推断出类型参数。尝试显式指定类型参数。
你推荐什么?强制演员(IDialog<object>
)?
答案 0 :(得分:2)
而不是将下一个对话框的责任委托给LoginDialog
,如果LoginDialog
有效或无效,则不会让Type.GetType
返回。来电者决定接下来打电话给谁?
关于您的问题,首先,检查+-----+------------+-------------+-----------+---------------------------------+
| dbg | prod | nostore | buildType | resulting variant |
+-----+------------+-------------+-----------+---------------------------------+
| dbg | production | nostoreprod | debug | dbgProductionNostoreprodDebug |
| dbg | production | nostoreprod | release | dbgProductionNostoreprodRelease |
+-----+------------+-------------+-----------+---------------------------------+
是否正在返回您的预期,然后是,尝试投放以查看问题是否存在或是否还有其他问题。