2

ASP .NET MVC コントローラーから呼び出された場合、GetMethod は public static メソッドを検出しません。(コンソール アプリケーションからは正常に動作します)。

このダミーSaveEntityGenericWrapperメソッドを使用して解決します。

SaveEntityGenericWrapperコードから削除するには?

ASP .NET MVC 2 コントローラーから呼び出された場合、GetMethod("SaveEntityGeneric")返されるのnullに機能するのはなぜですか?GetMethod("SaveEntityGenericWrapper")

SaveEntityGenericMVC2 で部分信頼が使用されている場合、プライベートにする方法は?

public class EntityBase() {

    public void SaveEntity(EntityBase original)
    { 
        var method = GetType().GetMethod("SaveEntityGenericWrapper");
        // why this line returns null if called from ASP .NET MVC 2 controller:
        // method = GetType().GetMethod("SaveEntityGeneric");
        var gm = method.MakeGenericMethod(GetType());
        gm.Invoke(this, new object[] { original, this });
    }

    // Dummy wrapper reqired for mvc reflection call only. 
    // How to remove it?
    public List<IList> SaveEntityGenericWrapper<TEntity>(TEntity original, TEntity modified)
        where TEntity : EntityBase, new()
    {
        return SaveEntityGeneric<TEntity>(original, modified);
    }

    public static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
                where TEntity : EntityBase, new()
    { ... actual work is performed here  }
}
4

2 に答える 2

1

BindingFlags静的メソッドが返されるように呼び出しで指定する必要がありますGetMethod(デフォルトではパブリックインスタンスメソッドのみが返されると思います)

 var method = GetType().GetMethod("SaveEntityGenericWrapper",
                                  BindingFlags.Static|BindingFlags.Public);
于 2011-09-13T19:04:32.427 に答える
0

単純にプライベートで問題を起こさないでください。勇敢にもっと複雑な問題を解決しようとします。

あなたの以前の投稿を見てください、それがどれほど単純だったか。

少なくとも、

internal static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
                where TEntity : EntityBase, new()
{
    ... 
}
于 2011-09-14T06:56:41.913 に答える