如何在果园中从字符串名称创建形状

本文关键字:创建 字符串 果园 | 更新日期: 2023-09-27 18:35:41

我想创建一个可以使用字符串值来定义形状的基本 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 一起使用来生成形状?

如何在果园中从字符串名称创建形状

是的,这是完全可能的。

动态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"));
}