创建泛型

时间:2015-12-17 12:02:56

标签: c# asp.net asp.net-mvc-4 httpmodule

我试图编写一个简单的IHttpModule(在本例中)记录登录用户正在点击的每个页面。我尝试在多个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() { }
}

我使用适当的程序集属性和方法调用在我的Global.asax中动态加载模块:

[assembly: PreApplicationStartMethod(typeof(WebPortal.MvcApplication), "Start")]

public static void Start()
{
  HttpApplication.RegisterModule(typeof(LogVisitModule<StaffMember>));
}

当我启动我的Web应用程序时,我收到服务器错误:

  

无法加载类型&#39; WebPortal.Modules.LogVisitModule&#39;。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.Web.HttpException:无法加载类型   &#39; WebPortal.Modules.LogVisitModule&#39;

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

任何帮助将不胜感激!我希望我尝试做的事情有意义吗?我甚至不知道我所做的事情是否可行。我用Google搜索动态加载带有泛型类型的HttpModule但是找不到很多东西。

0 个答案:

没有答案