抽象クラス A (A1、A2、A3 など) から派生したクラスはほとんどありません。
次のようなコードを使用して、独自の識別子を使用してこれらのクラスを BsonClassMap に登録する必要があります。
BsonClassMap.RegisterClassMap<A1>(cm =>
{
cm.AutoMap();
cm.SetDiscriminator(discriminator)
});
将来、そのようなクラスが増えるため、リフレクションを使用してそれを行いたいと考えています。
foreach (var type in Assembly.GetAssembly(typeof(A))
.GetTypes().Where(t => t.IsClass
&& !t.IsAbstract
&& t.IsSubclassOf(typeof(A))))
{
var discriminator = type.GetField("Discriminator")
.GetRawConstantValue()
.ToString();
var method = typeof(BsonClassMap).GetMethods()
.FirstOrDefault(m => m.IsGenericMethod
&& m.Name == "RegisterClassMap");
if (method == null) continue;
var generic = method.MakeGenericMethod(type);
generic.Invoke(this, null);
}
そのようなラムダ式をこの関数に渡すにはどうすればよいですか?
cm =>
{
cm.AutoMap();
cm.SetDiscriminator(discriminator)
});
ジェネリック メソッドを呼び出す方法についての説明を多数見つけましたが、これを機能させることはできません。