假设我有一个.NET工作流基础(WF)SequenceActivity
类下面的“输出”属性:Workflow Foundation(WF) - 为什么使用SetValue()将一个DependencyProperty设置为一个COM对象会引发一个ArgumentException?
public IWorkspace Workspace { get; private set; }
// ^^^^^^^^^^
// important: this is a COM interface type!
public static DependencyProperty WorkspaceProperty = DependencyProperty.Register(
"Workspace",
typeof(IWorkspace),
typeof(FoobarActivity)); // <-- this activity class
该活动执行一些代码,设置两个以上这样的:
this.Workspace = ...; // exact code not relevant; property set to a COM object
SetValue(WorkspaceProperty, this.Workspace);
最后一行(这使得调用SetValue
)在ArgumentException
结果用于第二帕ameter(具有this.Workspace
值):
依赖属性
Workspace
的[…].IWorkspace
类型不匹配值的类型System.__ComObject
。
当我注册依赖属性与typeof(object)
代替typeof(IWorkspace)
作为第二个参数(德国翻译,英文异常文本可能稍有不同)
,代码执行就好了。但是,这将导致可能性将任何值分配给依赖项属性,而我不希望这样做。
在我看来,WF依赖项属性不适用于COM互操作对象。
有没有人有解决方案?
顺便说一句,转移到.NET 4.0并使用'动态'(它*可能*解决问题)目前不是一种选择。 – stakx 2010-04-19 07:20:15