条件错误:未声明属性。由于其保护级别,它可能无法访问

时间:2010-05-26 09:44:03

标签: workflow-foundation-4

我有一个工作流,其根活动是一个自定义NativeActivity,带有一个名为XmlData的公共InArgument。当我尝试在子项中使用此参数时,如果在以下条件中使用XmlData,则会出现以下错误:

'XmlData' is not declared. It may be inaccessible due to its protection level

我的属性如下所示:

public Activity Body {get;set;}
public InArgument<CustomObj> XmlData {get;set;}

这是CacheMetadata方法:

protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        var runtime = new RuntimeArgument("XmlData",typeof(CustomObj),ArgumentDirection.In,true);
        metadata.Bind(this.XmlData,runtime);
        metadata.AddArgument(runtime);

        metadata.AddChild(Body);
    }

我正在使用metadata.AddArgument方法在CacheMetadata中添加参数,我尝试使用AddChild和AddImplementationChild添加它拥有的子属性。

如果我用ActivityBuilder替换我的自定义活动并使用代码创建DynamicActivityProperty,那么条件可以成功编译,所以当我使用自己的代码时,我看不到我错过了什么。

1 个答案:

答案 0 :(得分:0)

我可以想到三种可能的解决方案,一种是愚蠢的,一种是hacky,另一种是模糊的。

解决方案1(愚蠢的一个) 将RuntimeArgument提升为私有只读成员并交换Bind和AddArgument调用,我有一些随机出现的地方,这有助于。

解决方案2(非常hacky) 您始终可以将值放在上下文中的命名属性中,并将其拉出子项

解决方案3(明智之举) 如果要将InArgument传递给子节点,请将其绑定到变量并将子节点绑定到变量。

有任何帮助吗? 约翰