Ошибка условия: свойство не объявлено. Он может быть недоступен из-за его уровня защиты

У меня есть рабочий процесс, корневая активность которого является пользовательской NativeActivity с общедоступным аргументом InArgument, называемым XmlData. Когда я пытаюсь использовать этот аргумент в дочернем действии If, я получаю следующую ошибку, используя 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);
    }

Я добавляю аргумент внутри CacheMetadata, используя метод metadata.AddArgument, и я пытался добавить его дочернее свойство, используя как AddChild, так и AddImplementationChild.

Если я заменю свою пользовательскую активность на ActivityBuilder и использую код для создания DynamicActivityProperty, тогда условие может быть успешно скомпилировано, поэтому я не вижу, чего мне не хватает, когда я использую свой собственный код.


person Stoive    schedule 26.05.2010    source источник
comment
Было бы полезно поделиться некоторым кодом.   -  person Maurice    schedule 26.05.2010
comment
Извините, что не добавил их для начала. Теперь они добавлены.   -  person Stoive    schedule 26.05.2010
comment
Что произойдет, если вы закомментируете функцию CacheMetadata? Реализация по умолчанию должна быть достаточно хорошей. Также является ли CustomObj общедоступным типом? Предполагаемая ошибка является внутренней.   -  person Maurice    schedule 26.05.2010
comment
Та же проблема, если я тоже полагаюсь на отражение. Это общедоступный тип в общедоступной собственности. ActivityBuilder создает аргументы как внутреннее свойство, что объясняет, почему он работает, когда я его использую.   -  person Stoive    schedule 26.05.2010
comment
Иногда вы получаете странные ошибки, подобные этой, когда имена типов совпадают с именами пространств имен или полное пространство имен содержит одно и то же имя несколько раз.   -  person Maurice    schedule 26.05.2010
comment
Вы используете действие в рабочем процессе, определенном в коде или в XAML? Это ошибка времени выполнения, когда рабочий процесс запускает CacheMetadata?   -  person Tim Lovell-Smith    schedule 02.06.2010
comment
Это чистый рабочий процесс XAML, и да, это ошибка времени выполнения.   -  person Stoive    schedule 03.06.2010


Ответы (1)


Я могу придумать 3 возможных решения: одно глупое, одно хакерское, а другое смутно разумное.

Решение 1 (глупое) Повысьте уровень RuntimeArgument до закрытого члена, доступного только для чтения, и поменяйте местами вызовы Bind и AddArgument. У меня было несколько случайных случаев, когда это помогло.

Решение 2 (очень хакерское). Вы всегда можете поместить значения в именованное свойство в контексте и вытащить его в дочернем

Решение 3 (разумное). Если вы хотите передать InArgument дочернему элементу, привяжите его к переменной и привяжите дочерний элемент к переменной.

Кто-нибудь из них помогает? Джон

person John Mc    schedule 14.07.2011