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); }
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); }
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); }
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); }
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); } } }