static IEnumerable<object> ProcessContextInternal(this IKayakContext context, IKayakFrameworkBehavior behavior) { yield return context.Request.Begin(); var info = new InvocationInfo(); context.SetInvocationInfo(info); yield return behavior.Route(context); var failed = false; var auth = behavior.Authenticate(context); if (auth != null) yield return auth.Do(r => failed = r); if (!failed) { info.Target = Activator.CreateInstance(info.Method.DeclaringType); var parameterCount = info.Method.GetParameters().Length; info.Arguments = new object[parameterCount]; yield return behavior.Bind(context); context.PerformInvocation(); yield return behavior.Handle(context); } yield return context.Response.End(); }
void InvokeMethod(object target, string name) { var method = target.GetType().GetMethod(name); if (method == null) throw new Exception("Unknown method '" + name + "'"); info = new InvocationInfo() { Target = target, Method = method, Arguments = arguments.ToArray() }; SetUpMockBehaviorBind(); mockContext.Object.PerformInvocation(mockBehavior.Object); }
public void NullInfoTargetException() { mockContext.DefaultValue = DefaultValue.Mock; var mockRequest = Mock.Get(mockContext.Object.Request); mockRequest.Setup(r => r.Begin()).Returns(Observable.Empty<Unit>()); SetUpMockBehaviorBind(Observable.Empty<InvocationInfo>()); SetUpMockBehaviorInvoke(); var mockTarget = new Mock<IBind>(); info = new InvocationInfo(); info.Method = mockTarget.Object.GetType().GetMethod("Bind0"); mockContext.Object.PerformInvocation(mockBehavior.Object); mockRequest.VerifyAll(); mockBehavior.VerifyAll(); mockSubject.Verify(s => s.OnError(It.Is<Exception>(e => e.Message == "Binder returned by behavior did not yield an instance of InvocationInfo."))); }
internal static void SetInvocationInfo(this IKayakContext context, InvocationInfo info) { context.Items[InvocationInfoContextKey] = info; }
public KayakInvocation(KayakContext context, InvocationInfo info) { Context = context; Info = info; Binders = new List<IParameterBinder>(); Handlers = new List<IResultHandler>(); }
internal static void SetInvocationInfo(this IDictionary<string, object> context, InvocationInfo info) { context[InvocationInfoContextKey] = info; }
internal MappingEventArgs(KayakContext context, InvocationInfo invocationInfo) { Context = context; InvocationInfo = invocationInfo; }
InvocationInfo RaiseMapping(KayakContext context, InvocationInfo invocationInfo) { if (Mapping != null) { var mappingArgs = new MappingEventArgs(context, invocationInfo); Mapping(this, mappingArgs); invocationInfo = mappingArgs.InvocationInfo; } return invocationInfo; }
public void WillRespond(KayakContext context, Action<bool, Exception> callback) { try { InvocationInfo invocationInfo = new InvocationInfo(); invocationInfo.Method = GetMethodForContext(context); invocationInfo = RaiseMapping(context, invocationInfo); bool willRespond = invocationInfo.Method != null; if (willRespond) context.Items[InvocationInfoContextKey] = invocationInfo; callback(willRespond, null); } catch (Exception e) { callback(false, e); } }