我正在开发一个分布在我公司内部并被各种应用程序使用的库。该库必须是平台无关的,因为它可以部署在Web上下文中,甚至可以部署在控制台应用程序中。我想将对象注册为per-http-request或per-thread,具体取决于使用此框架的应用程序的上下文。在StructureMap中,我可以使用Hybrid生命周期来完成此操作。本质上,如果存在HttpContext,那么该对象的范围将限定为该范围,否则将在每个线程的基础上使用ThreadLocalStorage。分布式库或使用应用程序无需其他配置。这是否可以使用Autofac?鉴于我们的开发人员技能水平差异很大,我们的目标是最大限度地减少/消除消费者的任何专业配置。
我知道使用InstancePerLifetimeScope生命周期注册可以与上下文无关,但是为了将InstancePerLifetimeScope注册绑定到Http,需要使用 ASP.NET/WCF/MVC 集成二进制文件来消费应用程序。请求。或者,对于每线程范围,使用代码需要负责创建lifetime scope per thread。
有什么建议吗?
答案 0 :(得分:3)
很容易实现自己的生命周期管理器,它将检查'HttpContext.Current!= null',然后委托给其中一个现有管理器。
但我建议每个应用程序连接适当的管理器本身。一个例子是单元测试场景,其中'HttpContext'可能不存在,因为它被模拟了你可能想要为测试特定目的手动控制生命周期。