我想创建一个基本的ContentPart驱动程序类,它可以使用字符串值来定义形状。这不是我想要的确切代码,但应该显示我希望做的一般概念。
而不是以下内容:
protected override DriverResult Display(ProductPart, string displayType, dynamic shapeHelper)
{
return this.ContentShape("Parts_Product",
() => shapeHelper.Parts_Product());
}
我希望能够做到这样的事情:
protected override DriverResult Display(ProductPart, string displayType, dynamic shapeHelper)
{
return this.ContentShape("Parts_Product",
() => shapeHelper["Parts_Product"]());
}
有没有办法在shapeHelpers中使用字符串名来生成形状?
答案 0 :(得分:3)
是的,这完全有可能。
动态shapeHelper
对象是IShapeFactory
的实例。此界面提供了完全按照您的需要进行操作的方法。
不使用动态方法调用shapeHelper.Parts_Product()
,而只使用提供的Create
方法重载之一,例如。 shapeHelper.Create("Parts_Product")
。
实际上,这正是调用动态方法时发生的事情。
最后,您的整个示例可能如下所示:
protected override DriverResult Display(
ProductPart part, string displayType, dynamic shapeHelper)
{
// It's better to cast shapeHelper to IShapeFactory first
// to avoid dynamic dispatch
return this.ContentShape("Parts_Product",
() => ((IShapeFactory)shapeHelper).Create("Parts_Product"));
}