public void Intercept(IInvocation invocation) { var method = invocation.Method; var member = _state.PropertyOf(method); switch (member.role) { case PropertyMethodRole.None: throw new InvalidOperationException($"Attempting to invoke a state member that is not a property: {method.Name}"); case PropertyMethodRole.Getter: _doGet(member.prop, invocation); break; case PropertyMethodRole.Setter: _doSet(member.prop, invocation); break; } }