ルールを編集するための GUI を備えたルール エンジンである WF3.x の PolicyActivity の機能を基本的にレプリケートする xaml で再利用できるネイティブ アクティビティを作成しようとしています。
私の問題は、私が を呼び出すとWorkflowInvoker.Invoke
、それが is である Model と表示されることです。これは、InArgument
このNull
コードが Frode Nilsen のブログのように Activity を返す関数として機能するためではないことがわかっています:
Using WF 4 as a Rules Engine My質問は、InArgument
Xaml アクティビティから正しく取得していますか?
public sealed class RuleSequenceAcitvity : NativeActivity<Sequence>
{
private Sequence _sequence;
InArgument<HomeIndexViewModel> Model { get; set; } //Same name as inArgument in xaml
protected override void Execute(NativeActivityContext context)
{
populateSequence();
var input = new Dictionary<string, object>();
//The following line is giving me the Null Argument Exception
var model = context.GetValue<HomeIndexViewModel>(this.Model);
input.Add("Model", model);
WorkflowInvoker.Invoke(_sequence, input);
}
private void populateSequence()
{
//get the list of rules from repository
var rules = ObjectFactory.Container.GetInstance<IRuleRepository>().Rules.ToList();
//Declare a dynamic property as the view model
var inProperty = new DynamicActivityProperty
{
Name = "Model",
Type = typeof(InArgument<HomeIndexViewModel>),
Value = Model
};
var activity = new DynamicActivity() { Properties = { inProperty } };
//Import references
Common.AddVbSetting(activity);
_sequence = new Sequence();
activity.Implementation = () => _sequence;
//Sort Descending - those added first are lowest priority
var sortedRules = rules.OrderBy(x => x.Priority).ToList();
foreach (var inRule in rules)
{
var outRule = RuleConverter.ToIfActivity(inRule);
_sequence.Activities.Add(outRule);
}
}
}
}