2011-10-04 23 views
10

我正在开发一个库,内部分发给我公司并由各种应用程序使用。这个库必须是平台不可知的,因为它可能被部署在Web上下文中,甚至在控制台应用程序中。我想注册对象为per-http-request或per-thread,这取决于使用此框架的应用程序的上下文。在StructureMap中,我可以使用Hybrid生命周期来做到这一点。从本质上讲,如果存在一个HttpContext,那么该对象将被限定为该范围,否则ThreadLocalStorage将以每个线程为基础使用。分布式库或消费应用程序不需要额外的配置。这可能使用Autofac?鉴于我们开发人员技能水平的多变性,我们的目标是最大限度地减少/消除针对消费者的任何专门配置。自动选择每个线程或每个请求的生命期范围

据我所知,注册可以是上下文无关使用InstancePerLifetimeScope寿命,但随后消费应用程序都需要消耗ASP.NET/WCF/MVC积分二进制文件,以登记InstancePerLifetimeScope绑定到的HTTP请求。或者,对于每个线程范围,消费代码需要负责创建lifetime scope per thread

有什么建议吗?

+0

Autofac支持自定义生命周期,难道你不能模仿StructureMap的'Hybrid'生命周期吗? – neontapir

回答

3

很容易实现自己的生命周期管理器,它将检查'HttpContext.Current!= null'然后委托给其中一个现有的管理者。

但是,我会建议每个应用程序连接适当的管理器本身。一个例子是一个单元测试场景,其中'HttpContext'可能不存在,因为它可能是模拟的,你可能想手动控制生命周期以满足特定的测试目的。

+0

你可以举一个自定义终身管理者的例子吗? –

+1

https://github.com/autofac/Autofac/blob/4c5f4ca554137f184cb705035011c3a0261c1128/Core/Source/Autofac.Integration.Mvc/RequestLifetimeScopeProvider.cs –

相关问题