我正在使用匿名类型将类型化对象的集合传递给TemplateResolver,其中新实例化的文本模板中的命名占位符可以从多个对象中获取值,例如:
var body = TemplateResolver.ResolveTemplate(template.ExternalRecipientBody, new {Sender = customer, NewJobCard = jobCard});
模板中包含{Sender$Surname}
和{NewJobCard$JobNumber}
等占位符。
在ResolveTemplate
内部我需要强烈输入Sender和NewJobCard,而不知道将它们转换为什么。
解决方案如此
到目前为止,我已经想出了这个,但不喜欢使用字符串成员名称。我有asked another question关于至少在方法调用中以某种方式lmbda'字符串的可能性,即使不是方法体。
private T GetAnonymousTypeMember<T>(object anonymousType, string memberName) where T: class
{
var anonTypesType = anonymousType.GetType();
var propInfo = anonTypesType.GetProperty(memberName);
return propInfo.GetValue(anonymousType, null) as T;
}
答案 0 :(得分:1)
匿名类型只有方法范围,因此您将无法访问“ResolveTemplate”方法中的强类型属性。
你有两个选择:
如果您需要从多个源“解析”属性,请考虑使用OO抽象形式(接口/抽象类)来传递类型。