如何在Orchard中从字符串名称创建形状?

时间:2014-12-30 03:38:06

标签: c# .net asp.net-mvc orchardcms

我想创建一个基本的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中使用字符串名来生成形状?

1 个答案:

答案 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"));
}