コード例 #1
0
        private string GenericDeleteSql(AspectContext context)
        {
            var builder = SqlBuilderSelecter.Get(Provider);
            var gt      = AgileRepositoryGenericTypeArguments(context);
            var sql     = (string)GenericCallHelper.RunGenericMethod(builder.GetType(), "DeleteById", gt, builder,
                                                                     new object[] { });

            return(sql);
        }
コード例 #2
0
        private string GenericSqlByMethodName(AspectContext context, AspectDelegate next)
        {
            var builder = SqlBuilderSelecter.Get(Provider);

            var gt  = AgileRepositoryGenericTypeArguments(context);
            var sql = (string)GenericCallHelper.RunGenericMethod(builder.GetType(), "MethodNameToSql", gt, builder,
                                                                 new object[] { context.ProxyMethod.Name });

            return(sql);
        }
コード例 #3
0
        private string GenericSql(AspectContext context, AspectDelegate next)
        {
            var builder = SqlBuilderSelecter.Get(Provider);

            var gt = AgileRepositoryGenericTypeArguments(context);
            //get IAgileRepository<TEntity> 's TEntity for MethodNameToSql's T
            var sql = (string)GenericCallHelper.RunGenericMethod(builder.GetType(), "Select", gt, builder,
                                                                 new object[] {});

            return(sql);
        }
コード例 #4
0
        public virtual string MethodNameToSql <T>(string methodName) where T : class
        {
            if (string.IsNullOrEmpty(methodName))
            {
                throw new ArgumentNullException(nameof(methodName));
            }

            string sql      = "";
            var    cacheKey = $"MethodNameToSql_{typeof(T)}_{methodName}";
            var    hit      = SqlCacheDict.TryGetValue(cacheKey, out sql);

            if (hit)
            {
                return(sql);
            }

            MethodPrefixsKey methodPreix = null;

            foreach (var prefix in MethodPrefixs)
            {
                methodPreix = prefix;
                if (methodName.StartsWith(prefix.Name))
                {
                    break;
                }
            }

            if (methodPreix == null)
            {
                throw new Exception(string.Format("Can not hit sql method from method name :{0}", methodName));
            }

            var select = GenericCallHelper.RunGenericMethod(this.GetType(), methodPreix.GeneratorMethod,
                                                            new Type[] { typeof(T) }, this, null);

            var where = "";
            if (methodPreix.NeedWhere)
            {
                where = " where " + MethodNameToWhere(methodName);
            }
            sql = select + where;

            SqlCacheDict.TryAdd(cacheKey, sql);

            return(sql);
        }
コード例 #5
0
        public static object RunGenericCount(Type returnType, IDbConnection conn, string sql, object paramters)
        {
            if (_countMethod == null)
            {
                lock (_lock)
                {
                    if (_countMethod == null)
                    {
                        _countMethod = GenericCallHelper.GetGenericMethod(typeof(QueryHelper), "Count",
                                                                          new Type[] { returnType });
                    }
                }
            }

            return(_countMethod.Invoke(_instance, new object[]
            {
                conn, sql, paramters
            }));
        }
コード例 #6
0
        public static void RegisterAgileRepositories(this ContainerBuilder builder, string assembleyName)
        {
            var assembly = Assembly.Load(assembleyName);

            var types          = assembly.GetTypes();
            var assignTypeFrom = typeof(IAgileRepository <>);

            foreach (var t in types)
            {
                if (!t.IsInterface)
                {
                    continue;
                }
                if (t.GetInterfaces()
                    .Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == assignTypeFrom))
                {
                    var instance = GenericCallHelper.RunGenericMethod(AgileRepository.Proxy.GetType(),
                                                                      "SingletonInstance", new Type[] { t }, AgileRepository.Proxy, new object[] {});
                    builder.RegisterInstance(instance).As(t);
                }
            }
        }