У меня есть собственный NativeActivity с кучей InArguments. Это всегда будет корневое действие, когда клиент редактирует свой рабочий процесс в обновленном конструкторе. Пока все хорошо.
Проблема в том, что, хотя InArguments отображаются в PropertyInspector, вкладка «Аргументы» не отображается. Я понимаю, почему это происходит, но я действительно хочу сделать это NativeActivity корневым действием по ряду причин: я могу настроить его по своему усмотрению, я могу дать ему собственный конструктор и т. Д.
Как я могу иметь свойства аргумента для NativeActivity таким образом, чтобы они отображались на вкладке «Аргументы» в конструкторе, делая их доступными и позволяя клиенту делать все, что он / она хочет, с InArguments без аргумента «» "не объявлено. Может быть недоступно из-за уровня защиты" думаете?
Что я пробовал:
- Точно так же, как переменные, где мы можем использовать Collection {Variable}, и дизайнер распознает ее как место, где находятся переменные активности, я пробовал Collection {Argument}. Не повезло!
- Просто напишите InArgument в NativeActivity. Они отображаются в Property Inspector, но не могут быть использованы в рабочем процессе через конструктор. Опять же, они не могут быть разрешены, и "аргумент" не назван ". Он может быть недоступен из-за уровня защиты".
- Свяжите предыдущие InArguments с RuntimeArguments через CacheMetadata (), используя metadata.AddArgument () и metadata.Bind (). Не повезло вообще.
Я знал, что ActivityBuilder, вероятно, лучший способ решить эту проблему. Я успешно попробовал что-то вроде:
ActivityBuilder builder = new ActivityBuilder();
builder.Implementation = new MyCustomNativeActivity();
DynamicActivityProperty property = new DynamicActivityProperty()
{
Name = "TestArg",
Type = typeof(InArgument<string>),
};
builder.Properties.Add(property);
Designer.Load(builder);
Но это приводит к плохому коду, потому что у меня были аргументы при загрузке конструктора. Это препятствует тому, чтобы я имел библиотеку с моими пользовательскими действиями, отделенными от самого кода форм. Главным образом потому, что ActivityBuilder - это запечатанный класс, очень похожий на DynamicActivity, который, я полагаю, тоже будет работать.
Можно ли имитировать поведение ActivityBuilder, позволяющее добавлять свойства во время кода, но используя NativeActivity, который можно легко наследовать и настраивать?
Надеюсь, я ясно дал понять.
П.С .: Я также взглянул на IExecutionProperty, но не очень хорошо понял, как он работает, какова его цель и можно ли его здесь применять.
Спасибо