Я хотел бы узнать, какое из свойств исходного объекта ввода использовал метод. После выполнения метода мне нужно сохранить в базе данных, какое из свойств было использовано.
Входными данными может быть любой класс с простыми типами, например:
public class MyData : IMyData
{
public string A { get; set; }
public int B { get; set; }
public decimal C { get; set; }
}
Я думал, что может быть выполнено с использованием интерфейса в качестве входных данных для метода, поэтому я могу заменить исходный объект более продвинутым объектом, который хранит использование свойств.
public interface IMyData
{
string A { get; }
int B { get; }
decimal C { get; }
}
Я могу затем
- Создайте объект Dynami c с такими же свойствами
- Используйте ImpromptuInterface, чтобы имитировать динамический c объект, реализующий мой интерфейс
Вызвать мой метод с этим динамическим c интерфейсом
private static void Main()
{
var data = new MyData { A = "Test", B = 3, C = new decimal(1.2) };
IDictionary<string, object> replacementObject = new ExpandoObject();
replacementObject.Add("FieldsUsed", new List<string>());
foreach (var property in data.GetType().GetProperties())
replacementObject.Add(property.Name, property.GetValue(data));
var replacementInterface = replacementObject.ActLike<IMyData>();
DoStuff(replacementInterface);
Console.WriteLine($"The method used these fields {string.Join(", ", (List<string>)replacementObject["FieldsUsed"])}");
}
private static void DoStuff(IMyData source)
{
Console.WriteLine($"A is {source.A}");
if (source.B > 5)
Console.WriteLine($"C is {source.C}");
}
В приведенном выше примере я хотел бы сохранить, что использовались поля A и B.
Только я застрял в том, как я должен хранить, когда свойство используется моим методом DoStuff.