首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用服务栈的funq容器作为依赖注入器,实现nhibernate session per request模式

使用服务栈的Funq容器作为依赖注入器,可以实现NHibernate的Session Per Request模式。下面是一个完善且全面的答案:

Funq是一个轻量级的依赖注入容器,可以帮助我们管理对象之间的依赖关系。NHibernate是一个流行的ORM(对象关系映射)框架,用于将对象映射到关系数据库中。

在实现NHibernate的Session Per Request模式时,我们可以使用Funq容器来管理NHibernate的Session对象的生命周期。Session Per Request模式是指每个HTTP请求都会创建一个新的NHibernate Session对象,并在请求结束后关闭和销毁该Session对象。

以下是实现步骤:

  1. 首先,我们需要在Funq容器中注册NHibernate的SessionFactory。SessionFactory是NHibernate的核心对象,用于创建Session对象。我们可以使用Funq的Register方法将SessionFactory注册到容器中。
代码语言:csharp
复制
container.Register<IDbSessionFactory>(c => new DbSessionFactory());
  1. 接下来,我们需要在Funq容器中注册一个工厂方法,用于创建Session对象。这个工厂方法将在每个HTTP请求开始时被调用,用于创建一个新的Session对象。
代码语言:csharp
复制
container.Register<IDbSession>(c => c.Resolve<IDbSessionFactory>().CreateSession());
  1. 然后,我们需要在每个HTTP请求开始时,从Funq容器中解析出Session对象,并将其存储在当前请求的上下文中。这样,在同一个请求处理过程中的所有组件都可以通过依赖注入获取到同一个Session对象。
代码语言:csharp
复制
public class NHibernateSessionPerRequest : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += (sender, e) =>
        {
            var session = container.Resolve<IDbSession>();
            HttpContext.Current.Items["NHibernateSession"] = session;
        };

        context.EndRequest += (sender, e) =>
        {
            var session = (IDbSession)HttpContext.Current.Items["NHibernateSession"];
            session.Dispose();
        };
    }

    public void Dispose()
    {
    }
}
  1. 最后,我们可以在需要使用Session对象的组件中,通过依赖注入获取到Session对象,并使用它进行数据库操作。
代码语言:csharp
复制
public class MyService
{
    private readonly IDbSession session;

    public MyService(IDbSession session)
    {
        this.session = session;
    }

    public void DoSomething()
    {
        // 使用session进行数据库操作
    }
}

这样,我们就成功地使用服务栈的Funq容器作为依赖注入器,实现了NHibernate的Session Per Request模式。

推荐的腾讯云相关产品:腾讯云容器服务(Tencent Kubernetes Engine,TKE)。TKE是腾讯云提供的一种高度可扩展的容器管理服务,可帮助用户轻松部署、管理和扩展容器化应用程序。TKE提供了强大的容器编排和调度功能,适用于各种规模的应用程序和工作负载。

产品介绍链接地址:https://cloud.tencent.com/product/tke

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring框架参考手册_5.0.0_中英文对照版_Part II_3.5

设计模式单例是对对象作用域进行硬编码,为是每个类加载只能创建一个特定类实例。Spring单例作用域最好描述是每个容器每个类。...因此如果你使用依赖注入将原型作用域bean注入到单例作用域bean中时,将会实例化一个新原型bean并依赖注入到单例bean中。原型bean实例曾经是唯一提供给单例作用域bean实例。...你不能依赖注入原型作用域bean到你单例bean中,因为当Spring容器实例化单例bean,解析并注入依赖时,注入只发生一次。...如果你监听设置有问题,作为一种选择,你可以考虑SpringRequestContextFilter。过滤器映射依赖于web应用程序相关配置,因此你必须适当更改它。...当将一个短期作用域bean注入到一个长期作用域bean中时,这不是你想要行为,例如将一个具有HTTP Session作用域协作bean作为一个依赖注入到一个单例bean中。

44420

关于Spring 和 Spring MVC43个问题【问题汇总】

这概念是说你不用创建对象,而只需要描述它如何被创建。你不在代码里直接组装你组件和服务,但是要在配置文件里描述哪些组件需要哪些服务,之后一个容器(IOC容器)负责把他们组装起来。...4、constructor:通byType一样,也是通过类型查找依赖对象。与byType区别在于它不是使用Seter方法注入,而是使用构造子注入。...1.降低了组件之间耦合性 ,实现了软件各层之间解耦 2.可以使用容易提供众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能...依赖注入DI是一个程序设计模式和架构模型, 一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC特殊实现依赖注入是指一个对象应用另外一个对象来提供一个特殊能力,例如:把一个 数据库连接已参数形式传到一个对象结构方法里面而不是在那个对象内部自行创建一个连接...也可以说,依赖注入到对象中。所以,控制反转是,关于一个对象如何获取他所依赖对象引用,这个责任反转。 41.spring有两种代理方式?

2.1K10

Java面试分享(题目+答案)

2.拦截和过滤器区别? 1、拦截是基于java反射机制, 而过滤器是基于函数回调。 2、过滤器依赖于servlet容器, 而拦截依赖于servlet容器。...6)使用OGNL访问值内容时, 不需要#号, 而访问requestsession、application、attr时, 需要加#号; 7)注意: Struts2中, OGNL表达式需要配合..., 实现了软件各层之间解耦; 5.容器提供单例模式支持; 6.可以使用容器提供众多服务, 如事务管理,消息服务等; 7.容器提供了众多辅助类, 能加快应用开发; 8.spring对于主流应用框架提供了集成支持...(依赖)控制权由应用代码本身转到了外部容器, 由容器根据配置文件去创建实例 并管理各个实例之间依赖关系, 控制权转移, 是所谓反转, 并且由容器动态将某种依赖关系注入到组件之中。...Spring AOP: Spring关键组件之一是AOP框架。 AOP在Spring中使用: 提供声明性企业服务, 特别是作为EJB声明式服务替代品。

1.3K30

Spring 基础知识面试

什么是依赖注入? 在依赖注入中,您不必创建对象,但是必须描述如何创建。不是直接在代码中将组件和服务连接起来,而是在配置文件中描述那些组件需要那些服务。IOC容器自动将他们装配到一起。 4....可以通过多少种方式完成依赖注入? 构造注入 setter 注入 接口注入 构造依赖注入:构造依赖注入通过容器触发一个类构造实现,该类有一系列参数,每个参数代表一个对其他类依赖。...Setter方法注入:Setter方法注入容器通过调用无参构造或无参static工厂 方法实例化bean之后,调用该beansetter方法,即实现了基于setter依赖注入 最好解决方案是用构造参数实现强制依赖...spring bean 容器生命周期流程如下: Spring 容器根据配置中 bean 定义中实例化 bean。 Spring 使用依赖注入填充所有属性,如 bean 中所定义配置。...3)Struts采用值存储请求和响应数据,通过OGNL存取数据,springmvc通过参数解析是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将

88110

Strust2总结及在面试中一些问题.

【其中WEB层会使用前端控制模式】 MVC是一种思想,是一种模式,将软件分为 Model模型、View视图、Controller控制。...Struts 2Action类实现了一个Action接口,连同其他接口一起实现可选择和自定义服务。Struts 2提供一个名叫ActionSupport基类实现一般使用接口。...当点击登录提交表单时,就会被下面的拦截进行封装,进行set注入值,实现参数封装。...Servlet API 常见操作 : 表单提交请求参数获取,向requestsession、application三个范围存取数据 ②.方式二:使用接口注入方式操作Servlet API(藕合)...1、①拦截是基于java反射机制,而过滤器是基于函数回调 2、②过滤器依赖与servlet容器,而拦截依赖与servlet容器 3、③拦截只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用

90970

struts2讲解

【其中WEB层会使用前端控制模式】 MVC是一种思想,是一种模式,将软件分为 Model模型、View视图、Controller控制。...Struts 2Action类实现了一个Action接口,连同其他接口一起实现可选择和自定义服务。Struts 2提供一个名叫ActionSupport基类实现一般使用接口。...当点击登录提交表单时,就会被下面的拦截进行封装,进行set注入值,实现参数封装。...服务处理服务后,转发页面,客户端点击刷新(重定向) 客户端网络过慢,按钮连续点击(按钮点击一次后,禁用按钮) 使用令牌机制 18.简单说一下ActionProxy运行原理?...1、①拦截是基于java反射机制,而过滤器是基于函数回调 2、②过滤器依赖与servlet容器,而拦截依赖与servlet容器 3、③拦截只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用

64830

SSM框架面试题总结

Spring 如何实现一个IOC容器 配置文件配置包扫描路径 递归包扫描获取.class文件 反射,确定需要交给IOC管理类 对需要注入类进行依赖注入 配置文件中指定需要扫描包路径 定义一些注解,...Singleton:默认,每个容器中只有一个bean实例,单例模式由BeanFactory自身来维护,该对象生命周期是与Spring IOC容器一致(但在第一次被注入时才会创建) prototype...Spring中ThreadLocal Spring框架中都用到了哪些设计模式 Spring中设计模式 Spring事务实现方式和原理以及隔离级别 在使用Spring框架时,可以有两种声明事务方式...,通过constructor,否则byType SpringBoot,SpringMVC,Spring Spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便整合各种框架...为什么要使用嵌入式服务?

50030

Laravel源码笔记(一)程序结构与生命周期

说起PHP框架,就不得不提大名鼎鼎Lavarel。作为一个“专为Web艺术家而创造”框架,其优雅、简洁开发体验吸引了一大批Web开发者,并成为PHP社区中使用最为广泛框架之一。...在现代程序设计中,为了解决不同类之间相互耦合,接口与实现类之间绑定混乱问题,往往采用依赖注入方式将类之间依赖关系从程序内部提到了外部容器来管理,即IoC(Inversion of Control...在laravel中,服务容器以完全限定命名空间名称或用户自定义别名(aliase)作为索引,将该类已有实例或实例构造存放到自身定义instances和bingdings两个数组属性中。...那么服务容器具体又是如何实现 服务名=》实例 映射呢?答案是依赖解决resolve()方法。...正是通过这个自顶向下注入过程,有效避免了复杂依赖关系下大量new和make代码编写。 通过服务容器注入实例类统称为服务提供者类(ServiceProvider)。

2.4K31

真肝,整理了一周Spring面试大全【含答案】,吊打Java面试官

接口注入:必须实现某个接口,接口提供方法来为其注⼊依赖对象。使用少,因为它强制要求被注入对象实现不必要接口,侵入性强。 Q8:依赖注入相关注解?...依赖注入过程就是将 Bean 对象实例设置到它所依赖 Bean 对象属性上,真正 依赖注入是通过方法实现,该方法使用了委派模式。...③ request:每次 HTTP 请求都会创建⼀个新 Bean 并把它放到 request 域中,在请求完成后 Bean会失效并被垃圾收集回收。...④ session:和 request 类似,确保每个 session 中有⼀个 Bean 实例,session 过期后bean会随之失效。...容器会在初始化时对配置Bean 进行预实例化,Bean 依赖注入容器初始化时就已经完成,属于立即加载,适合单例模式,⼀般推荐使用。 Q19.

38140

Spring容器依赖注入(DI)

1.2 为什么要使用Spring         Spring堪称Java世界中最强大框架,其亮点非常多,主要体现在以下几个方面。 (1)使用Spring可以实现DI(依赖注入)。...例如Tomcat服务,不过是一组JSP/Servlet接口实现容器,我们完全可以用其它实现同样接口容器(如Jetty)来替代它。...Spring实现依赖注入         所谓依赖注入DI(Dependency Injection),一些文献也称之控制反转IOC(Inversion of Control):是一种松耦合开发模式,...> 6 在Web环境中启动Spring容器         在Web环境中,应用程序是由Web服务启动,Spring要作为对象容器(对象工厂)为各层提供依赖注入功能,就必须在...针对这个问题,Spring提供了Web服务监听程序,使用监听监听Web应用程序启动事件,并在事件处理函数中创建Spring实例并使用单例模式缓存起来(存放到Web应用程序上下文中,即ServletContext

43120

spring官方文档 中文_Spring软件

项目的依赖(对象)仅通过构造参数,工厂方法参数或者通过构造或工厂方法返回实例对象set方法来定义他们依赖(属性)。容器在bean对象创建时,将依赖注入到bean对象中。...bean及其之间依赖关系反映在容器使用配置元数据中。 2.1.1 补充 Service Locator Pattern:服务定位模式,一种设计模式。...当我们希望使用JNDI查找来定位各种服务时,选择此种设计模式。这种设计模式使用了缓存技术。 第一次需要服务时,服务定位在JNDI中查找并缓存服务对象。...然后容器在创建bean时注入这些依赖项。这个过程基本上是bean本身逆过程(因此称为控制反转过程),由对象自己控制实例化或者定位他依赖,改变为通过直接使用构造方法或者使用服务定位模式。...依赖注入存在与两个主要部分:基于构造依赖注入和基于Set方法依赖注入 Constructor-based Dependency Injection 基于构造依赖注入 Constructor-based

3.5K21

Spring框架-面试题核心概念

核心功能如下: (1)DI依赖注入容器实现面向接口、模块化开发。 (2)AOP面向切面容器实现程序动态统一增强。...DI使得模块间只依赖于接口,而不是实现类(实现类在运行时由容器注入),使得软件模块可以独立开发与测试,降低耦合度。 3.什么是AOP?...而对不同Http请求则会产生新Bean,而且该bean仅在当前Http Request内有效。      session:在一次Http Session中,容器会返回该Bean同一实例。...global Session:在一个全局Http Session中,容器会返回该Bean同一个实例,仅在使用 portlet context时有效。 7.Spring中Bean生命周期?...9.Spring中依赖注入方式有几种 要点: (1)set属性注入 (2)构造注入 (3)静态工厂方法注入 (4)实例工厂方法注入 10.Spring配置方式有哪些 要点:    Spring支持

16340

.Net Web开发技术

WSDL Web Services Description Language是一个用来描述Web服务和说明如何与Web服务通信XML语言。...创建型 结构型 行为型 存储 浏览自身缓存技术(cache control,与服务约定,js /css等缓存) Session(SessionId)(会话,为了弥补http协议无状态特性) Cookie...MVVM框架 实现一个简单js模板引擎 Angular 路由、模块化、控制、指令、作用域、模板、链式函数、过滤器、服务依赖注入......依赖倒置框架 基于面向对象6大原则之 - 依赖倒置原则DIP - 工厂模式实现 IOC - inversion of control 控制反转,调用者不再创建被调用者实例,由框架(容器)创建 DL -...Dependency Lookup 依赖查找,容器提供回调接口和上下文环境给组件 DI - Dependency Injection 依赖注入容器创建好实例后再注入调用者 .

4.9K30

Laravel 底层原理:门面(Facades)

大家好,又见面了,我是全君。 简介 Facades 为应用服务容器绑定类提供了一个“静态”接口。 Laravel 内置了很多 Facades ,可以访问绝大部分 Laravel 功能。...Laravel 门面作为服务容器中底层类“静态代理”,相比于传统静态方法,在维护时能够提供更加易于测试、更加灵活、简明优雅语法。...而使用依赖注入时候,使用类越多,构造方法就会越长,在视觉上就会引起注意,提醒你这个类有点庞大了。因此在使用 Facades 时候,要特别注意控制好类大小,让类作用范围保持短小。...因为扩展包是在 Laravel 本身之外构建,所以你无法使用 Laravel Facades 测试辅助函数。 Facades Vs. 依赖注入 依赖注入主要优点之一是切换注入实现能力。...但是,因为 Facades 使用动态方法来代理从服务容器解析对象方法调用,我们可以像测试注入类实例一样来测试 Facades。

1.3K10

深入剖析 Laravel 服务容器

目录结构 序章 依赖注入基本概念 什么是依赖注入 什么是依赖注入容器 什么是控制反转(IoC) Laravel 服务容器是什么 小结 Laravel 服务容器使用方法 管理待创建类依赖 常用绑定方法...「依赖注入结果就是「控制反转」目的,也就说 控制反转 最终目标是为了 实现项目的高内聚低耦合,而 实现这种目标 方式则是通过 依赖注入 这种设计模式。...我们在编写控制时,经常会使用类型提示功能将某个类作为依赖传入构造函数;但在执行这个类时却无需我们去实例化这个类所需依赖,这一切归功于自动解析能力。...除了研究这些服务究竟如何被注册到服务容器,还将学习它们是如何使用。...这些与服务容器绑定相关方法便直接继承自 Container 类。 bind 方法执行原理 bind 绑定作为最基本绑定方法,可以很好说明 Laravel 是如何实现绑定服务处理

8.9K10

spring和springMVC面试问题总结

答:1.降低了组件之间耦合性 ,实现了软件各层之间解耦 2.可以使用容易提供众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,...request:在请求bean范围内会每一个来自客户端网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收回收。...4、 constructor:通byType一样,也是通过类型查找依赖对象。与byType区别在于它不是使用Seter方法注入,而是使用构造子注入。...答:依赖注入DI是一个程序设计模式和架构模型, 一些时候也称作控制反转,尽管在技术上来讲,依赖注入是一个IOC特殊实现依赖注入是指一个对象应用另外一个对象来提供一个特殊能力,例如:把一个 数据库连接已参数形式传到一个对象结构方法里面而不是在那个对象内部自行创建一个连接...也可以说,依赖注入到对象中。所 以,控制反转是,关于一个对象如何获取他所依赖对象引用,这个责任反转。

69290

别再找了,这就是全网最全SpringBean作用域管理!

GoF单例模式会硬编码对象作用域,使得每个类加载只能创建一个特定类唯一实例 因此,最恰当应该将Spring单例作用域描述为一个容器对应一个bean。...Bean作为依赖情况下,容器返回将是同一个实例 换言之,当开发者定义一个Bean作用域为单例时,Spring IoC容器只会根据Bean定义来创建该Bean唯一实例。...想象一下,对于我们购物车,我们需要注入产品服务。...由于服务没有状态,并且会基于在方法签名中所传递对象进行验证,因此不存在风险 当使用单例Bean时候,而该单例Bean依赖是原型Bean时,需要注意依赖解析都是在初始化阶段 因此,如果将原型...然而,假设你需要单例Bean对原型Bean依赖 需要每次在运行时都请求一个新实例,那么你就不能够将一个原型Bean来注入到一个单例Bean当中了,因为依赖注入只会进行一次 当Spring容器在实例化单例

64010

别再找了,这就是全网最全SpringBean作用域管理!

GoF单例模式会硬编码对象作用域,使得每个类加载只能创建一个特定类唯一实例 因此,最恰当应该将Spring单例作用域描述为一个容器对应一个bean。...Bean作为依赖情况下,容器返回将是同一个实例 换言之,当开发者定义一个Bean作用域为单例时,Spring IoC容器只会根据Bean定义来创建该Bean唯一实例。...想象一下,对于我们购物车,我们需要注入产品服务。...由于服务没有状态,并且会基于在方法签名中所传递对象进行验证,因此不存在风险 当使用单例Bean时候,而该单例Bean依赖是原型Bean时,需要注意依赖解析都是在初始化阶段 因此,如果将原型...然而,假设你需要单例Bean对原型Bean依赖 需要每次在运行时都请求一个新实例,那么你就不能够将一个原型Bean来注入到一个单例Bean当中了,因为依赖注入只会进行一次 当Spring容器在实例化单例

52130
领券