问候一个和所有!
我是 WF 4.0 和 WWF 的新手,所以如果这似乎是一个新手类型的问题,请原谅我,但请相信我,我已经在互联网的深处搜寻了解决这个问题的方法,但无济于事。
我创建了一个带有自定义 CodeActivity 的示例 WF 应用程序,该应用程序需要提供扩展,如下所示:
public sealed class PreparePizza : CodeActivity
{
public InArgument<Order> Order { get; set; }
protected override void CacheMetadata(CodeActivityMetadata metadata)
{
base.CacheMetadata(metadata);
if (this.Order == null)
metadata.AddValidationError("You must supply an Order.");
metadata.RequireExtension<IPreparePizzaExtension>();
}
// If your activity returns a value, derive from CodeActivity<TResult>
// and return the value from the Execute method.
protected override void Execute(CodeActivityContext context)
{
// Obtain the runtime value of the Text input argument
Order order = context.GetValue(this.Order);
var extension = context.GetExtension<IPreparePizzaExtension>();
extension.Prepare(order);
}
}
public interface IPreparePizzaExtension
{
void Prepare(Order order);
}
然后,我将此活动插入到工作流服务中,并尝试通过添加服务引用来通过我的 Web 应用程序使用。但是,当我添加参考时,我得到:
System.Activities.ValidationException:必须配置“PizzaMan.ActivityLibrary.IPreparePizzaExtension”类型的扩展才能运行此工作流。
很公平——当然,我的活动要求我将 IPreparePizzaExtension 的实现传递给它——毕竟,我已经告诉它了!
所以我的问题是,我到底如何将它传递给服务?我可以在控制台应用程序场景中使用 WorkflowInvoker 轻松管理此操作,但我看不到任何明显的方法可以通过服务方法执行此操作。我会假设显然需要一种添加引用的程序化方法,但是我再次对如何进行此操作感到茫然。
任何帮助将不胜感激。
最好的问候伊恩