自助注册 类

Self registering Classes

我目前正在开始使用 C# 开发 Alexa Skill。因为我不想在检查传入请求的意图类型时出现混乱,所以我想到了以下想法: 编写一个静态 class RequestHandler 存储所有可能意图的列表(IIntent 接口的列表将由 classes 代表一个意图)。

我知道有概念上的问题,我不知道注册这些意图的最佳方式是什么。我的第一个想法是只写

internal static void RegisterIntent(IIntent intent) => Intents.Add(intent);

并在每个意图的静态构造函数中调用它。在这一点上,我不知道静态构造函数只会在第一次访问 class 时执行。所以这个想法并没有像我想的那样奏效。 我所知道的其他想法是:

有没有一种方法可以将所有意图 classes 添加到静态列表中,而无需为此注册操作手动添加代码?还是有比我目前使用的那两种方法更好的方法来实现这一目标?也许反思一下(说实话:我对 AWS lamda 开发还很陌生,我不知道这是否可行)。

我同时使用反射更改了注册。所以我可以在请求处理程序的静态构造函数中搜索所有实现 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);
            }
        }
    }

或者有什么更好的方案吗?