我的代码有点问题。
基本上,我正在尝试将通过反序列化 JSON 创建的类动态添加到我的 ServiceCollection 中,这样我就可以从任何需要它们的类中获取它们。到目前为止,我有以下代码:
Assembly.GetExecutingAssembly().GetTypes().Where(t => t.IsSubclassOf(typeof(AbstractConfiguration)) && !t.IsAbstract).ToList().ForEach(x => {
if (!File.Exists(x.Name + ".json")) {
object Configuration = Activator.CreateInstance(x);
File.WriteAllText(x.Name + ".json", JsonSerializer.Serialize(Configuration, new JsonSerializerOptions() { WriteIndented = true }));
ServiceCollection.AddSingleton(Configuration);
} else {
string json = File.ReadAllText(x.Name + ".json");
object Configuration = JsonSerializer.Deserialize(json, x, new JsonSerializerOptions() { WriteIndented = true });
ServiceCollection.AddSingleton(Configuration);
}
});
我们将 JSON 加载到一个类中(有效),然后将其添加到我们的集合中(有效);当添加到我们的集合中时,类型是一个对象,所以当我尝试通过 调用它时Services.GetServices(typeof(BotConfiguration)).ToList().Count);
,它返回 0。什么给出了?
好吧,如果我们改为尝试 run Services.GetServices(typeof(object)).ToList().ForEach(x => Console.WriteLine(x.ToString()));
,我们实际上可以看到这个实例化实际上属于对象类型,即使当我们运行 x.ToString() 时,它表明它是 BotConfiguration 的一个实例(输出 Dexter.Core.Configurations. BotConfiguration 在我的例子中)。
我们如何让我们的 ServiceCollection 将其添加为它的实际类而不是对象?它清楚地知道它是什么类型……?