プロパティを持つオブジェクトを持つクラスがあります。これらのオブジェクトにはメソッドがあります。文字列値/変数から、オブジェクトであるこのプロパティを取得してそのメソッドを実行したいと思います。C#プロパティであるオブジェクトを取得し、文字列値からオブジェクト内のメソッドを実行します。
var property = this.GetType().GetProperty("SomePropertyObject");
MethodInfo getMethod = property.GetMethod;
var obj = getMethod.Invoke......
var runMethod = obj.GetType().GetMethod("SomeMethod");
runMethod.Invoke(obj, new object[] { value1 });
問題は、私がプロパティを取得したときに、取得するメソッドと設定するメソッドしかないことです。 getメソッドでオブジェクトを取得できる場合は、オブジェクトメソッドを実行できます。可能であれば教えてください。どうすればいいですか?
ご協力いただき誠にありがとうございます。
編集:
基本的に私は、エンティティフレームワークDbContextクラスに監査を追加したいです。私は小規模のプロジェクトのために単一のテーブル監査を作成しましたが、今はリフレクションを使用してテーブルごとの監査を作成したいと考えています。 AuditIdとAction(更新、追加、ソフト削除など)を持つそれぞれのモデルと同じ監査モデルを作成できます。 ModelとModelAuditの間でプロパティー値を転送するためにリフレクションを使用します。
ModelAuditをそれぞれのDbSetコレクションに追加する現在のswitch文を変更したいと思います。私が正しくあなたの質問を理解していた場合は、次の操作を行うことができ
private void SaveAudit(DbEntityEntry entry)
{
try
{
var name = entry.Entity.GetType().Name;
var space = entry.Entity.GetType().Namespace;
var type = Type.GetType(string.Format("{0}.Audits.{1}Audit", space, name));
object audit = null;
if (type != null)
{
audit = Activator.CreateInstance(type);
var props =
entry.Entity.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy);
audit.GetType().GetProperty("Action").SetValue(audit, entry.State.ToString());
foreach (var prop in props)
{
if (prop.CanWrite && prop.CanRead)
switch (prop.PropertyType.ToString())
{
case "System.String":
case "System.string":
case "System.Int32":
case "System.Nullable`1[System.Int32]":
case "System.Int64":
case "System.bool":
case "System.Nullable`1[System.Boolean]":
case "System.DateTime":
case "System.Nullable`1[System.DateTime]":
audit.GetType().GetProperty(prop.Name).SetValue(audit, prop.GetValue(entry.Entity));
break;
}
}
// TODO: Replace with reflection.
if (!entry.State.ToString().Equals("Unchanged"))
{
switch (name)
{
case "Account":
AccountAudits.Add((AccountAudit) audit);
サンプルオブジェクトを表示できますか? –
あなたが 'this'を使っているとすれば、' this.SomePropertyObject.SomeMethod(value1); 'をなぜ呼び出さないのですか?あなたのコメントがあなたの問題に当てはまらない場合は、より良い例を与える必要があるかもしれません。 – Nkosi
私の編集が私の状況を少し良く説明してくれることを願っています。 – JayKayOf4