bev*_*qua 26 c# castle-windsor inversion-of-control quartz.net asp.net-mvc-3
我有一个Web应用程序,其中注册了许多组件.LifestylePerWebRequest()
,现在我决定实现Quartz.NET,一个.NET作业调度库,它在不同的线程中执行,而不是Request线程.
因此,HttpContext.Current
收益率null
.IDbConnection
到目前为止,我的服务,存储库和实例已被使用,.LifestylePerWebRequest()
因为它使得在请求结束时更容易处理它们.
现在我想在两种情况下使用这些组件,在Web请求期间我希望它们不受影响,在非请求上下文中我希望它们使用不同的生活方式,我想我可以自己处理处理,但我该怎么办关于它根据当前背景选择组件的生活方式?
目前我注册服务(例如),像这样:
container.Register(
AllTypes
.FromAssemblyContaining<EmailService>()
.Where(t => t.Name.EndsWith("Service"))
.WithService.Select(IoC.SelectByInterfaceConvention)
.LifestylePerWebRequest()
);
Run Code Online (Sandbox Code Playgroud)
我想我应该使用某种扩展方法,但我只是看不到它..
cuo*_*gle 24
您应该使用来自castleprojectcontrib的Hybrid Lifestyle.
混合生活方式实际上融合了两种潜在的生活方式:主要生活方式和次要生活方式.混合生活方式首先尝试使用主要的生活方式; 如果由于某种原因它不可用,它会使用次要的生活方式.这通常与PerWebRequest一起用作主要生活方式:如果HTTP上下文可用,则将其用作组件实例的范围; 否则使用次要生活方式.
不要使用相同的组件.事实上,在大多数情况下,我已经看到"后台处理"在网络流程中开始时甚至没有意义.
根据评论进行阐述.
Web管道中的Shoehorning后台处理会影响您的体系结构,以便在EC2实例上节省一些$.我强烈建议再考虑一下,但我离题了.
我的陈述仍然有效,即使你将两个组件都放在Web过程中,它们是两个不同的上下文中使用的两个不同的组件,应该这样对待.
归档时间: |
|
查看次数: |
14303 次 |
最近记录: |