public static T CreateProxy <T>(this ICacheProxyGenerator generator,
                                        CreateProxyOptions options, params object[] additionalParameters)
            where T : class
        {
            if (generator == null)
            {
                throw new ArgumentNullException(nameof(generator));
            }
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }

            var args = new object[6 + additionalParameters.Length];

            Array.Copy(additionalParameters, args, additionalParameters.Length);

            args[args.Length - 6] = options.CacheProviderFactory;
            args[args.Length - 5] = options.DistributedLockFactory;
            args[args.Length - 4] = options.KeyFormatter;
            args[args.Length - 3] = options.ValueSerializer;
            args[args.Length - 2] = options.StreamManager;
            args[args.Length - 1] = new OptionMonitorWrapper(options.Options);

            return((T)Activator.CreateInstance(generator.CreateProxyType(typeof(T)), args));
        }
        public static Type CreateProxyType <T>(this ICacheProxyGenerator generator)
            where T : class
        {
            if (generator == null)
            {
                throw new ArgumentNullException(nameof(generator));
            }

            return(generator.CreateProxyType(typeof(T)));
        }
 public void GenericTest()
 {
     Generator.CreateProxyType <IGenericInterfaceCache <string> >();
     Generator.CreateProxyType <GenericMethodCache>();
     Generator.CreateProxyType <GenericTypeCache <string> >();
 }