コード例 #1
0
ファイル: MethodRule.cs プロジェクト: michaellperry/Miruken
 public object[] ResolveArgs(
     PolicyMethodBinding binding, object callback, IHandler handler)
 {
     return(_args.Take(binding.Dispatcher.Parameters.Length)
            .Select(arg => arg.Resolve(callback, binding, handler))
            .ToArray());
 }
コード例 #2
0
 public override void Configure(PolicyMethodBinding binding)
 {
     if (!binding.Dispatcher.IsVoid)
     {
         Rule.Configure(binding);
     }
 }
コード例 #3
0
        private static void InferVariance(PolicyMethodBinding method)
        {
            var restrict = method.Attribute.Key as Type;

            if (restrict != null)
            {
                if (method.VarianceType == null)
                {
                    method.VarianceType = restrict;
                }
            }
        }
コード例 #4
0
        protected static void InferVariance(PolicyMethodBinding method)
        {
            var key      = method.Attribute.Key;
            var restrict = key as Type;

            if (restrict != null)
            {
                if (method.VarianceType == null ||
                    method.VarianceType.IsAssignableFrom(restrict))
                {
                    method.VarianceType = restrict;
                }
            }
        }
コード例 #5
0
ファイル: ReturnsKey.cs プロジェクト: michaellperry/Miruken
        public override void Configure(PolicyMethodBinding binding)
        {
            base.Configure(binding);
            var returnType = binding.Dispatcher.LogicalReturnType;

            if (returnType.IsArray)
            {
                returnType = returnType.GetElementType();
            }
            if (returnType == typeof(object))
            {
                return;
            }
            binding.VarianceType = returnType;
        }
コード例 #6
0
        public override void Configure(
            ParameterInfo parameter, PolicyMethodBinding binding)
        {
            base.Configure(parameter, binding);
            var paramType = parameter.ParameterType;

            if (paramType.IsGenericParameter)
            {
                var contraints = paramType.GetGenericParameterConstraints();
                paramType = contraints.Length == 1
                          ? contraints[0]
                          : typeof(object);
            }
            if (paramType == typeof(object))
            {
                return;
            }
            binding.CallbackIndex = parameter.Position;
            binding.VarianceType  = paramType;
        }
コード例 #7
0
            public void Insert(PolicyMethodBinding method)
            {
                var key = method.GetKey();

                if (key == null)
                {
                    var unknown = _unknown ??
                                  (_unknown = new List <PolicyMethodBinding>());
                    unknown.Add(method);
                    return;
                }

                var indexed = _indexed ??
                              (_indexed = new Dictionary <object, List <PolicyMethodBinding> >());

                List <PolicyMethodBinding> methods;

                if (!indexed.TryGetValue(key, out methods))
                {
                    methods = new List <PolicyMethodBinding>();
                    indexed.Add(key, methods);
                }
                methods.Add(method);
            }
コード例 #8
0
 public override object Resolve(
     object callback, PolicyMethodBinding binding, IHandler composer)
 {
     return(callback is Cb?_target((Cb)callback) : callback);
 }
コード例 #9
0
 public override object Resolve(
     object callback, PolicyMethodBinding binding, IHandler composer)
 {
     return(_extract((Cb)callback));
 }
コード例 #10
0
 public override void Configure(PolicyMethodBinding binding)
 {
     Rule.Configure(binding);
 }
コード例 #11
0
 public virtual void Configure(PolicyMethodBinding binding)
 {
 }
コード例 #12
0
ファイル: ArgumentRule.cs プロジェクト: michaellperry/Miruken
 public override object Resolve(
     object callback, PolicyMethodBinding binding, IHandler composer)
 {
     return(Argument.Resolve(callback, binding, composer));
 }
コード例 #13
0
ファイル: ArgumentRule.cs プロジェクト: michaellperry/Miruken
 public override void Configure(
     ParameterInfo parameter, PolicyMethodBinding binding)
 {
     Argument.Configure(parameter, binding);
 }
コード例 #14
0
ファイル: ArgumentRule.cs プロジェクト: michaellperry/Miruken
 public abstract object Resolve(
     object callback, PolicyMethodBinding binding, IHandler composer);
コード例 #15
0
ファイル: ArgumentRule.cs プロジェクト: michaellperry/Miruken
 public virtual void Configure(
     ParameterInfo parameter, PolicyMethodBinding binding)
 {
 }
コード例 #16
0
 public override object Resolve(
     object callback, PolicyMethodBinding binding, IHandler composer)
 {
     return(binding);
 }