代码之家  ›  专栏  ›  技术社区  ›  John K

可以在IHttpModule上实现.NET事件吗?

  •  1
  • John K  · 技术社区  · 14 年前

    这有道理吗?
    有没有我没看到的潜在陷阱?

    public class ResponseTweaker : IHttpModule {
    
        // to be a list of subscribers 
        List<Func<HttpApplication, bool>> listRespondants = new List<Func<HttpApplication, bool>>();
    
        // event that stores its subscribers in a collection
        public event Func<HttpApplication, bool> RequestConfirmation {
            add {
                listRespondants.Add(value);
            }
            remove {
                listRespondants.Remove(value);
            }
        }
    
        public void Init(HttpApplication context) {
            if (OnGetAnswer(context)) // poll subscribers ...
                // Conditionally Run Module logic to tweak Response ... 
        }
    
        /* Method that polls subscribers and returns 'true'
         *  if only one of them answers yes.
         */
        bool OnGetAnswer(HttpApplication app) {
            foreach (var respondant in listRespondants)
                if (respondant(app))
                    return true;
            return false;
        }
    
        // etc...
    }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Rahul Soni    14 年前

    我认为这不是个好主意。发行数量将取决于一些因素,如。。。

    1. listrepondants将被根化,因此将具有应用程序生存期。如果有一堆项目被添加,内存占用将继续增加。所以,它更愿意归结为这个列表中的项目数。

    1. IISReset或应用程序域回收将从应用程序中删除所有这些信息。你打算怎样把这些东西带回来?数据库?