Параметр modelAccessor не указывает на экземпляр объекта, а скорее на функцию, которая будет обращаться к какому-либо атрибуту вашего объекта. Func"инкапсулирует метод, который не имеет параметров и возвращает значение типа, указанного параметром TResult." Например, если у нас есть следующий класс:
public class Bar(){
[DisplayName("I am Foo.")]
public string Foo{get;}
}
Когда вызывается CreateMetaData, он будет создавать метаданные для свойства Foo, а modelAccessor будет функцией, возвращающей значение Foo.
Я немного покопался и нашел способ добраться до экземпляра объекта, но это требует использования отражения. Вы можете сделать следующее, чтобы получить класс Bar в моем примере:
if (modelAccessor != null)
{
//Use reflection to get the private field that holds the Bar object.
FieldInfo container = modelAccessor.Target.GetType().GetField("container");
//Invoke field on the modelAccessor target to get the instance of the Bar object.
Bar myObject = (Bar)container.GetValue(modelAccessor.Target);
}
Я проводил это только на простом тестовом примере, поэтому ваш пробег может отличаться, но, надеюсь, это поможет прояснить, что происходит.