我目前正在开始使用C#开发Alexa技能。因为我不希望有一个混乱的if块检查传入请求的意图类型我得到了以下想法: 编写一个静态类 RequestHandler ,它存储所有可能意图的列表( IIntent 接口的列表,它将由表示意图的类实现)。
我知道有概念问题,我不知道注册这些意图的最佳方法是什么。我的第一个想法就是写
internal static void RegisterIntent(IIntent intent) => Intents.Add(intent);
并在每个intent的静态构造函数中调用它。此时我不知道静态构造函数只会在第一次访问类时执行。所以这个想法并没有像我想的那样奏效。 我知道的其他想法可以想到:
有没有办法将所有意图类添加到静态列表中,而无需手动添加此注册操作的代码?还是有更好的方法来实现这一点,而不是我迄今为止的那两个?也许有反思(tbh:我对AWS lamda开发很新,我不知道这是否有用)。
答案 0 :(得分:0)
我同时用反射改变了注册。所以我可以在请求处理程序的静态构造函数中搜索实现IIntent
接口的所有类。
static RequestHandler()
{
var assembly = typeof(RequestHandler).GetTypeInfo().Assembly;
foreach (var t in assembly.GetTypes())
{
if (t.GetInterfaces().Contains(typeof(IIntent)))
{
Intents.Add(Activator.CreateInstance(t) as IIntent);
}
}
}
或者有更好的建议吗?