private static IArgChecker CreateFromMethodCallExpression(MethodCallExpression expression) { if (expression.Method.IsGenericMethod && expression.Method.DeclaringType == ArgClassType) { var expressionGenericMethodDefinition = expression.Method.GetGenericMethodDefinition(); if (expressionGenericMethodDefinition == ArgAnyMethodInfo) { return(new AnyArgChecker()); } if (expressionGenericMethodDefinition == ArgMatchMethodInfo) { var genericParameters = expression.Method.GetGenericArguments(); var typedMatchArgCheckerType = GenericMatchArgCheckerType.MakeGenericType(genericParameters); var constructorArgument = ((UnaryExpression)expression.Arguments[0]).Operand; var constructorArguments = new object[] { constructorArgument }; var matchArgChecker = (IArgChecker)Activator.CreateInstance( typedMatchArgCheckerType, constructorArguments); return(matchArgChecker); } } throw CaishenException.InvalidArgumentExpression(); }
public CastleCoreProxyFactory() { if (!typeof(TInterface).IsInterface) { throw CaishenException.ProxyFactoryNonInterface(); } }
public TInterface CreateProxy(TInterface underlyingObject, params IInterceptor[] interceptors) { if (underlyingObject == null) { throw CaishenException.UnderlyingObjectIsNull(); } var castleInterceptors = interceptors .Select(interceptor => new CastleInterceptor(interceptor) as Castle.DynamicProxy.IInterceptor) .ToArray(); var proxyObject = _proxyGenerator.CreateInterfaceProxyWithTargetInterface(underlyingObject, castleInterceptors); return(proxyObject); }
public IArgChecker CreateArgChecker(Expression expression) { switch (expression) { case ConstantExpression constantExpression: return(CreateFromConstantExpression(constantExpression)); case MethodCallExpression methodCallExpression: return(CreateFromMethodCallExpression(methodCallExpression)); default: throw CaishenException.InvalidArgumentExpression(); } }