asp.net-mvc – 如何在不依赖NHibernate的情况下为每个请求实现NHibernate会话?
|
我之前提出过这个问题,但我仍然在努力寻找一个可以让我理解的例子(请不要只是告诉我在没有至少一些指示的情况下查看S#arp架构项目). 到目前为止,我已经在我的网络项目中实现了近乎持久的无知.我的存储库类(在我的数据项目中)在构造函数中使用了一个ISession: public class ProductRepository : IProductRepository
{
private ISession _session;
public ProductRepository(ISession session) {
_session = session;
}
在我的global.asax中,我公开当前会话,并在beginrequest和endrequest上创建和处理会话(这是我对NHibernate的依赖): public static ISessionFactory SessionFactory = CreateSessionFactory();
private static ISessionFactory CreateSessionFactory() {
return new Configuration()
.Configure()
.BuildSessionFactory();
}
protected MvcApplication() {
BeginRequest += delegate {
CurrentSessionContext.Bind(SessionFactory.OpenSession());
};
EndRequest += delegate {
CurrentSessionContext.Unbind(SessionFactory).Dispose();
};
}
最后我的StructureMap注册表: public AppRegistry() {
For<ISession>().TheDefault
.Is.ConstructedBy(x => MvcApplication.SessionFactory.GetCurrentSession());
For<IProductRepository>().Use<ProductRepository>();
}
看来我需要我自己的ISession和ISessionFactory的通用实现,我可以在我的web项目中使用它并注入我的存储库? 所以只是为了澄清 – 我在我的存储库层使用NHibernate并希望使用session-per-(http)请求.因此,我将一个ISession注入到我的存储库构造函数中(使用structuremap).目前,为了在每个请求中创建和处理会话,我必须从我的web项目中引用NHibernate.这是我想要删除的依赖项. 谢谢, 解决方法为什么不创建IHttpModule并在那里执行创建和处理(可能在Begin_Request和End_Request事件中),但是将IHttpModule放在具有NHibernate依赖性的项目中.例如.namespace MyWebApp.Repository.NHibernateImpl
{
public class NHibernateModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(Context_BeginRequest);
context.EndRequest += new EventHandler(Context_EndRequest);
}
private void Context_BeginRequest(object sender,EventArgs e)
{
// Create your ISession
}
private void Context_EndRequest(object sender,EventArgs e)
{
// Close/Dispose your ISession
}
public void Dispose()
{
// Perhaps dispose of your ISessionFactory here
}
}
}
也许有更好的方法,我也有兴趣知道这一点,所以任何其他建议? (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC 3自定义身份验证/授权
- 执行迁移EF core 2.0时出错,将Identity id从string更改为in
- asp.net-mvc – 如何从对象HtmlAttributes中获取值
- 什么用于ASP.NET的成员资格
- asp.net-mvc – 处理onchange事件在HTML.DropDownList Razo
- asp.net-mvc-4 – MVC 4如果经过身份验证,则从登录页面重定
- asp.net-web-api – Structure Map无参数构造函数错误
- asp.net – 在.NET应用程序上使用Phantom JS生成PDF
- asp.net-mvc – ASP.NET MVC获取上次添加记录的ID
- asp.net-mvc – IIS显示服务器错误而不是自定义错误
- asp.net – 需要有关选择数据访问方法的建议
- asp.net-mvc – 在ASP.NET MVC项目中访问elmah.a
- asp.net-mvc-4 – ASP.NET Web API授权令牌提前到
- 身份验证 – 如何为Asp.NET MVC 5创建ClaimsIden
- asp.net – Kestrel和Katana之间的区别
- “必须知道”.NET Architect / Lead的IIS功能
- asp.net-mvc – ASP MVC 3 RequireHttps属性将所
- asp.net – 如何从codebehind访问web.config的ht
- asp.net – 跨线程使用HTTPContext
- asp.net-mvc – 如何从VOID方法重定向到MVC3中的
