コードに少し問題があります。
基本的に、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 に追加するにはどうすればよいでしょうか? 自分が何型かはっきりとわかる……?