2010-11-09 51 views
3
public class NHibernateSessionPerRequest<T>:IHttpModule 
{ 
    public void Dispose() { } 

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

如何在web.config中注册?如何注册泛型类作为IHttpModule

+0

在运行时T会是什么? – 2010-11-10 09:09:52

+0

它可以是任何类型的存储库类。 – cinek 2010-11-11 14:42:38

+0

所以,你将有一个每个数据库的每个请求会话? – 2010-11-26 09:11:43

回答

4

IIS6:在你的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.web节:在你的web.config的system.webserver部分:

<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“与程序集名称。

+0

我不认为这解决了通用模块类型的问题。这两个配置示例都显示正在注册的非泛型类型。 – Eilon 2010-11-09 21:31:10

+0

这段代码不适用于泛型类 – cinek 2010-11-09 21:33:17

+0

是的,当我写它时没有看到它。现在更正 – mathieu 2010-11-09 21:33:39

2

的最简单的解决方案是创建从这种类型的派生的混凝土类型,然后寄存器:

public class MyActualModule : NHibernateSessionPerRequest<SomeType> { 
} 

然后在web.config中寄存器MyActualModule。

或者,您可以对泛型类型使用符合CLR的语法,但这太糟糕了,我甚至不会在这里提及它。即使是像您这样的简单类型,其类型名称也可能超过100个字符。

相关问题