Ejemplo n.º 1
0
 /// <summary>
 /// 如果需要额外的初始化,默认只从Decider配置节中获取Decider实例,
 /// 如果DeciderSection没有配置,则为默认的decider。子类应该根据需要重写
 /// </summary>
 public virtual void InitSite()
 {
     if (isInit == false)
     {
         try
         {
             if (DeciderSection == null || DeciderSection.GetType() == typeof(DeciderSection))
                 decider = FactoryServices.DEFAULT_DECIDER;
             else
                 decider = (IAccessDecider)DeciderSection.GetExecutingObject();
             isInit = true;
         }
         catch
         {
             ServiceManager.LoggingService.Error("decider无法构造,请仔细检查配置是否正确");
             throw new CrystalWall.Config.ConfigurationException("decider", "decider无法构造,请仔细检查配置是否正确");
         }
     }
 }
Ejemplo n.º 2
0
 /// <summary>
 /// 子类应该重写初始化decider的方法,例如:添加ConfuseElect冲突选择器、添加异常后时间等。
 /// 默认实现只解析IPointResolve接口,因此,子类重写时应该首先调用base.InitDecider()
 /// </summary>
 protected virtual void InitDecider(IAccessDecider decider)
 {
     AbstractDecider de = decider as AbstractDecider;
     if (de == null)
         return;
     if (Resolves != null && Resolves.Count > 0)
     {
         try
         {
             //解析resolve
             foreach (PointResolveElement resolve in Resolves)
             {
                 IPointResolveStrategy strategy = (IPointResolveStrategy)Type.GetType(resolve.Class).GetConstructor(new Type[0]).Invoke(new object[0]);
                 InitResolve(strategy);
                 de.AddPointResolve(strategy);
             }
         }
         catch
         {
             ServiceManager.LoggingService.Error("无法构造resolve,请仔细检查配置是否正确");
             throw new ConfigurationException("resolve", "无法构造resolve,请仔细检查配置是否正确");
         }
     }
 }