public void OnPre(PreInterceptArgs e) { StringBuilder sbLogMessage = new StringBuilder(); sbLogMessage.AppendLine(e.ToString()); logger.Log(string.Format("Log başladı : {0}", sbLogMessage.ToString())); }
public object OnPre(PreInterceptArgs e) { // gerekli cache key ile kontrol ederek varsa cache'de çağırım öncesi metot'u execute // etmeden cache üzerinden ilgili veriyi geri dön. string cacheKey = string.Format("{0}_{1}", e.MethodName, string.Join("_", e.Arguments)); object data; if (cacheProvider.TryGetData(cacheKey, out data)) { //Proxy içinde esas metodu çalıştırma ben cache üzerinde veri buldum bu veriyi dön diyoruz e.OverrideReturnValue = true; } return(data); }
private object OnPreIntercept(object[] aspects, PreInterceptArgs e) { object response = null; foreach (IInterception loopAttribute in aspects) { if (loopAttribute is IPreVoidInterception) { ((IPreVoidInterception)loopAttribute).OnPre(e); } else if (loopAttribute is IPreInterception) { response = ((IPreInterception)loopAttribute).OnPre(e); } } return(response); }
public void OnPre(PreInterceptArgs e) { //Çalıştırılan metodu e.MethodName ile Roles arasında bağ kurup yetki kontrolü yapıp, yetkisi olmayan metodlar için hata fırlatırmalıyız if (Roles != null) { bool autrized = false; foreach (var role in Roles) { autrized = System.Threading.Thread.CurrentPrincipal.IsInRole(role); if (autrized) { break; } } if (!autrized) { throw new InvalidCredentialException($"{e.MethodName} is not authorized by your roles {String.Join(",", Roles)}"); } } }
public void OnPre(PreInterceptArgs e) { //Çalıştırılan metodu e.MethodName ile Roles arasında bağ kurup yetki kontrolü yapıp, yetkisi olmayan metodlar için hata fırlatırmalıyız if (Roles != null) { bool autrized = false; foreach (var role in Roles) { autrized = Thread.CurrentPrincipal.IsInRole(role); if (autrized) { break; } } if (!autrized) { throw new InvalidCredentialException($"{e.MethodName} metodunu çalıştırmak için yetkiniz yoktur"); } } }
//Attribute olarak eklenen metot çağırıldığında çalışacak olan metotdur. public override IMessage Invoke(IMessage msg) { var methodCallMessage = msg as IMethodCallMessage; ReturnMessage returnMessage = null; object[] interceptions = null; InterceptArgs e = CreateEventArgs(methodCallMessage); try { interceptions = GetInterceptions(methodCallMessage); // PreInterceptionlarımız çalıştırıyoruz, cache tarzı geriye donen attribute varsa bunlardan donen sonucu alıyoruz PreInterceptArgs preArg = new PreInterceptArgs(e); object result = OnPreIntercept(interceptions, preArg); // OverrideReturnValue true ise esas metodu çalıştırmamıza gerek yok if (preArg.OverrideReturnValue) { returnMessage = new ReturnMessage(result, null, 0, methodCallMessage.LogicalCallContext, methodCallMessage); } else { // boş resultımız olduğuna göre ilgili metodu çalıştırabiliriz result = methodCallMessage.MethodBase.Invoke(new T(), methodCallMessage.InArgs); returnMessage = new ReturnMessage(result, null, 0, methodCallMessage.LogicalCallContext, methodCallMessage); } OnPostIntercept(interceptions, new PostInterceptArgs(e, result)); // PostInterceptionlarımız çalıştırdıktan sonra artık geriye çıktıyı dönebiliriz. return(returnMessage); } catch (Exception ex) { var exArg = new ExceptionInterceptArgs(e, ex); OnErrorIntercept(interceptions, exArg); return(new ReturnMessage(exArg.Ex, methodCallMessage)); } }
public void OnPre(PreInterceptArgs e) { mutex.WaitOne();//Thread lock }