Как я могу зарегистрировать универсальный класс как IHttpModule - PullRequest
3 голосов
/ 10 ноября 2010
public class NHibernateSessionPerRequest<T>:IHttpModule
{
    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.BeginRequest += BeginRequest;
        context.EndRequest += EndRequest;
    }
}

Как его можно зарегистрировать в web.config?

Ответы [ 2 ]

4 голосов
/ 10 ноября 2010

IIS6: в разделе system.web вашего web.config

<configuration>
  <system.web>
    <httpModules>
      <add name="MyModule" type="My.Namespace.NHibernateSessionPerRequest`1[[My.Namespace.MyType, My.Assembly]], My.Assembly"/>
    </httpModules>
  </system.web>
</configuration>

IIS7: в разделе system.webserver вашего web.config:

<configuration>
  <system.webServer>
    <modules>
      <add name="MyModule" type="My.Namespace.NHibernateSessionPerRequest`1[[My.Namespace.MyType, My.Assembly]], My.Assembly"/>
    </modules>
  </system.webServer>
</configuration>

Для обоих, замените «My.Namespace» на пространство имен класса, а «My.Assembly» на имя сборки.

2 голосов
/ 10 ноября 2010

Самое простое решение - создать конкретный тип, производный от этого типа, и затем зарегистрировать его:

public class MyActualModule : NHibernateSessionPerRequest<SomeType> {
}

Затем в web.config зарегистрировать MyActualModule.

В качестве альтернативы вы можетеиспользуйте CLR-совместимый синтаксис для универсальных типов, но он настолько ужасен, что я даже не буду упоминать его здесь.Даже такой простой тип, как ваш, будет иметь имя типа длиной более 100 символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...