みなさん、こんにちは!
私はWF4.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を使用して、コンソールアプリのシナリオで十分に簡単に管理できますが、サービスアプローチを介してこれを行う明確な方法がわかりません。明らかに、参照を追加するためのプログラムによるアプローチが必要であると思いますが、これを正確に行う方法については、やはり途方に暮れています。
どんな助けでも大歓迎です。
よろしくイアン