3

抽象クラス 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)
});

ジェネリック メソッドを呼び出す方法についての説明を多数見つけましたが、これを機能させることはできません。

4

2 に答える 2