public static void StartGenericWorkflow(this IWorkflowHost host, object workflow)
        {
            //var reg = host.Registry;
            var method = host.GetType()
                         .GetMethods()
                         .Where(m => m.IsGenericMethod && m.Name == "StartWorkflow")
                         .First();
            var workflowType = workflow.GetType();
            var buildMethod  = workflowType
                               .GetMethod("Build");
            var buildMethodParameterType = buildMethod.GetParameters()[0].ParameterType;
            var buildMethodDataType      = buildMethodParameterType.GetGenericArguments()[0];
            var generic = method.MakeGenericMethod(buildMethodDataType);
            //var invokeType = workflowType
            //    .GetInterfaces()
            //    .FirstOrDefault(i => i.FullName == generic.GetParameters()[0].ParameterType.FullName);
            var dataInstance = Activator.CreateInstance(buildMethodDataType);
            var jWorkflow    = JObject.FromObject(workflow);

            generic.Invoke(host, new[] { jWorkflow.Value <string>("Id"), dataInstance, "" });
        }