C# 创建泛型类型的HttpModule

C# 创建泛型类型的HttpModule,c#,asp.net,asp.net-mvc-4,httpmodule,C#,Asp.net,Asp.net Mvc 4,Httpmodule,我试图编写一个简单的IHTTP模块(在本例中)记录登录用户点击的每个页面。我正在尝试使它在多个Web应用程序中通用,以便它可以用于多种不同类型的用户对象 我有一个接口ILogUser,它有一个属性: public interface ILogUser { public string LoggingRef { get;} } 我在从该界面继承的各种Web应用程序中有几个不同的用户对象: public class StaffMember : ILogUser { public int Id

我试图编写一个简单的IHTTP模块(在本例中)记录登录用户点击的每个页面。我正在尝试使它在多个Web应用程序中通用,以便它可以用于多种不同类型的用户对象

我有一个接口
ILogUser
,它有一个属性:

public interface ILogUser
{
  public string LoggingRef { get;}
}
我在从该界面继承的各种Web应用程序中有几个不同的用户对象:

public class StaffMember : ILogUser
{
  public int Id { get; set; }
  public string Name { get; set; }
  // many more properties
  public string LoggingRef { get { return Name; }}
}

public class ExtranetUser : ILogUser
{
  public int Id { get; set; }
  public string Email { get; set; }
  // many more properties
  public string LoggingRef { get { return Email; }}
}
等等

我的HttpModule编码如下:

public class LogVisitModule<T> : IHttpModule where T : ILogUser
{
  private readonly ILog log;

  public LogVisitModule()
  {
    log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
  }

  public void Init(HttpApplication app)
  {
    app.PostAcquireRequestState += new EventHandler(this.PostAcquireRequestState);
  }

  private void PostAcquireRequestState(object sender, EventArgs e)
  {
    HttpApplication app = (HttpApplication)sender;
    HttpContext context = app.Context;

    if (context.Session != null && context.Session["CurrentUser"] != null)
    {
      var user = (T)context.Session["CurrentUser"];
      log.Info($"User {user.LoggingRef} has accessed {context.Request.FilePath}");
    }
  }

  public void Dispose() { }
}
启动Web应用程序时,出现服务器错误:

无法加载类型“WebPortal.Modules.LogVisitModule”

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

异常详细信息:System.Web.HttpException:无法加载类型 “WebPortal.Modules.LogVisitModule”

源错误:

在执行过程中生成了未处理的异常 当前web请求。关于货物来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常


任何帮助都将不胜感激!我希望我想做的有意义?我甚至不知道我所做的是否可能。我在谷歌上搜索了动态加载带有泛型类型的HttpModules,但还没有找到很多。是否可以只对
对象
s进行操作?构造函数中的这一行让我感到很不舒服
MethodBase.GetCurrentMethod().DeclaringType
,为什么不使用简单的
GetType()
?@CSharpie-错误的复制和粘贴:)感谢您指出。出于好奇,如果您从LogVisitModule中删除泛型,它将按预期加载和运行?@Alex-是的,它在没有泛型的情况下运行得非常好。
public static void Start()
{
  HttpApplication.RegisterModule(typeof(LogVisitModule<StaffMember>));
}