Чтобы дать первый ответ на свой вопрос, я нашел этот обходной путь:
Если объект COM обернут в объект .NET, Workflow Foundation сможет справиться с ним.
(1) Сначала определите универсальный вспомогательный класс:
public class Wrapped<T>
{
T Value { get; set; }
public Wrapped(T init)
{
Value = init;
}
}
(2) Затем измените приведенные выше определения свойств активности на:
public Wrapped<IWorkspace> Workspace { get; private set; }
// ^^^^^^^^^^^^^^^^^^^
// this is now a .NET class type wrapping a COM object instance.
public static DependencyProperty WorkspaceProperty = DependencyProperty.Register(
"Workspace",
typeof(Wrapped<IWorkspace>),
typeof(FoobarActivity));
(3) Наконец, присвоение свойству Workspace
теперь становится:
this.Workspace = new Wrapped<IWorkspace>(...);
Хотя это работает просто отлично, это все еще только обходной путь.
Если у кого-то есть более элегантное решение, я бы хотел услышать об этом.