长话短说。
我有一个现有的应用程序,我试图让ServiceStack创建我们的新API。该应用程序目前是一个MVC3应用程序,并使用UnitOfWork模式,使用MVC路由上的属性注入来创建/完成应用属性的事务。
尝试用ServiceStack来完成类似的事情
这个要旨显示了相关的ServiceStack配置设置。我好奇的是全局请求/响应过滤器--这些过滤器将为每个请求创建一个新的工作单元,并在向客户端发送响应之前关闭它(其中有一个检查,因此如果出现写入db的错误,我们将返回一个适当的响应给客户端,而不是一个错误的“成功”消息)。
我的问题是:
发布于 2013-01-11 05:05:35
正如在ServiceStack的IOC wiki中提到的,Funq默认将依赖项注册为单例。因此,要向RequestScope注册它,您需要指定它,如下所示:
container.RegisterAutoWiredAs<NHibernateUnitOfWork, IUnitOfWork()
.ReusedWithin(ReuseScope.Request);虽然这不太可能是您想要的,因为它注册为单例,即为每个请求返回相同的实例:
container.Register<ISession>((c) => {
var uow = (INHibernateUnitOfWork) c.Resolve<IUnitOfWork>();
return uow.Session;
});你可能想做这个:
.ReusedWithin(ReuseScope.Request); //per request
.ReusedWithin(ReuseScope.None); //Executed each time its injected使用RequestScope也适用于全局请求/响应过滤器,它将获得与服务中使用的实例相同的实例。
发布于 2013-01-10 23:17:37
1) --无论您使用的是ServiceStack、MVC、WCF、Nancy还是任何其他web框架,最常用的方法是按请求会话模式。在web术语中,这意味着在请求开始时创建一个新的工作单元,并在请求结束时处理该工作单元。几乎所有的web框架都有这些事件的钩子。
资源:
2) --您应该始终在事务中与NHibernate交互。
关于原因的解释,请参阅下列任何一项:
注意,当切换到使用带有读取的事务时,一定要让自己意识到空行为:http://www.zvolkov.com/clog/2009/07/09/why-nhibernate-updates-db-on-commit-of-read-only-transaction/#comments
https://stackoverflow.com/questions/14252251
复制相似问题